2012-01-23 8 views
0

"content"としてoutputResourceを持つツリーを実装しました(Downloading file from IceFaces tree参照)。Icefaces tree + outputResource

しかし、ファイルをダウンロードしようとすると(私はtxtまたはcsvファイルしか持っていません)、HTTP 500ステータスエラーが表示されます。

ツリー構造がある

Root 
    |-infoFiles 
    | |-A.csv 
    | |-B.csv 
    |-validateFiles 
    | |-C.txt 
    | |-D.txt 

そして、私はリソースをクリックすると例外のようなものは

java.io.FileNotFoundException: C:\SRC\dataFiles\998\validateFiles (Access denied) 
    java.io.FileInputStream.open(Native Method) 
    java.io.FileInputStream.<init>(FileInputStream.java:138) 
    java.io.FileInputStream.<init>(FileInputStream.java:97) 
    mx.gob.sagarpa.utilidades.FileResource.open(FileResource.java:39) 
    com.icesoft.faces.component.outputresource.RegisteredResource.open(OutputResource.java:474) 
    com.icesoft.faces.context.ResourceRegistryLocator$DynamicResourceDispatcherAdapter$DynamicResourceAdapter.open(ResourceRegistryLocator.java:117) 
    org.icefaces.impl.push.DynamicResourceDispatcher$ResourceServer.respond(DynamicResourceDispatcher.java:224) 
    org.icefaces.impl.push.DynamicResourceDispatcher$ResourceServer.handleResourceRequest(DynamicResourceDispatcher.java:201) 
    org.icefaces.impl.push.DynamicResourceDispatcher$Mapping.handleResourceRequest(DynamicResourceDispatcher.java:370) 
    org.icefaces.impl.push.DynamicResourceDispatcher.handleResourceRequest(DynamicResourceDispatcher.java:89) 
    org.icefaces.application.ResourceRegistry.handleResourceRequest(ResourceRegistry.java:75) 
    org.icefaces.impl.application.WindowScopeManager.handleResourceRequest(WindowScopeManager.java:165) 
    javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapper.java:125) 
    javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapper.java:125) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:591) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 

は、時にはそれも TXTで時々ちょうどCSVファイルで発生しています

Tree.xhtml

   <ice:tree id="tree" 
          value="#{treeBean.model}" 
          var="item" 
          hideRootNode="false" 
          hideNavigation="false" 
          > 
        <ice:treeNode> 
         <f:facet name="icon"> 
          <ice:panelGroup style="display: inline"> 
           <h:graphicImage value="#{item.userObject.icon}" /> 
          </ice:panelGroup> 
         </f:facet> 
         <f:facet name="content"> 
          <ice:panelGroup style="display: inline-block"> 
           <ice:outputResource resource="#{item.userObject.resource}" 
                fileName="#{item.userObject.resource.filename}" 
                mimeType="#{item.userObject.resource.mimeType}" 
                /> 
          </ice:panelGroup> 
         </f:facet> 
        </ice:treeNode> 
       </ice:tree> 

TreeBean.java

@ManagedBean 
@ViewScoped 
public class TreeBean implements Serializable { 

private DefaultTreeModel model; 
public final String openFolderImg = "./img/tree_folder_open.gif"; 
public final String closeFolderImg = "./img/tree_folder_close.gif"; 
public final String fileImg = "./img/tree_document.gif"; 
@ManagedProperty("#{userBean}") 
private UserBean userBean; 

@PostConstruct 
public void init() { 
    // create root node with its children expanded 
    DefaultMutableTreeNode rootTreeNode = new DefaultMutableTreeNode(); 
    FileResourceUserObject rootObject = new FileResourceUserObject(rootTreeNode); 
    rootObject.setText("Sistema de Rendición de Cuentas"); 
    rootObject.setExpanded(true); 
    rootObject.setResource(new FileResource("Sistema de Rendición de Cuentas", null)); 
    rootObject.setBranchContractedIcon(openFolderImg); 
    rootObject.setBranchExpandedIcon(closeFolderImg); 
    rootTreeNode.setUserObject(rootObject); 

    // model is accessed by the ice:tree component 
    model = new DefaultTreeModel(rootTreeNode); 
    File f = new File("./998/"); 
    createTree(f, rootTreeNode); 
} 

public DefaultTreeModel getModel() { 
    return model; 
} 

public UserBean getUserBean() { 
    return userBean; 
} 

public void setUserBean(UserBean userBean) { 
    this.userBean = userBean; 
} 

private void createTree(File fileRoot, DefaultMutableTreeNode treeRoot) { 
    File[] files = fileRoot.listFiles(); 
    DefaultMutableTreeNode branchNode; 
    for (File f : files) { 
     if (f.isDirectory()) { 
      branchNode = new DefaultMutableTreeNode(); 
      FileResourceUserObject branchObject = new FileResourceUserObject(branchNode); 
      branchObject.setExpanded(false); 
      branchObject.setText(f.getName()); 
      branchObject.setResource(new FileResource(f.getName(), f.getAbsolutePath())); 
      branchObject.setBranchContractedIcon(openFolderImg); 
      branchObject.setBranchExpandedIcon(closeFolderImg); 
      branchNode.setUserObject(branchObject); 
      treeRoot.add(branchNode); 
      createTree(f, branchNode); 
     } 
     if (f.isFile()) { 
      branchNode = new DefaultMutableTreeNode(); 
      FileResourceUserObject branchObject = new FileResourceUserObject(branchNode); 
      branchObject.setText(f.getName()); 
      branchObject.setResource(new FileResource(f.getName(), f.getAbsolutePath())); 
      branchObject.setLeaf(true); 
      branchObject.setLeafIcon(fileImg); 
      branchNode.setUserObject(branchObject); 
      treeRoot.add(branchNode); 
     } 
    } 

    return; 
} 

}

FileResourceUserObject.java

public class FileResourceUserObject extends IceUserObject{ 

    private FileResource resource; 

    public FileResourceUserObject(DefaultMutableTreeNode wrapper) { 
     super(wrapper); 
    } 

    public FileResource getResource() { 
     return resource; 
    } 

    public void setResource(FileResource resource) { 
     this.resource = resource; 
    } 

} 

FileResou C:私は500ステータスエラーを得るときにFileNotFoundExceptionが常に同じパスにjava.io.FileNotFoundExceptionを指していることに気づいた何rce.java

public class FileResource implements Resource{ 

    private String filename; 
    private String fileAbsolutePath; 
    private String mimeType; 
    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); 

    public FileResource(String filename, String fileAbsolutePath) { 
     this.filename = filename; 
     this.fileAbsolutePath = fileAbsolutePath; 
     this.mimeType = ec.getMimeType(filename); 
    } 

    @Override 
    public String calculateDigest() { 
     return filename; 
    } 

    @Override 
    public InputStream open() throws IOException { 
     return new FileInputStream(fileAbsolutePath); 
    } 

    @Override 
    public Date lastModified() { 
     return new Date(); 
    } 

    @Override 
    public void withOptions(Options optns) throws IOException { 

    } 

    public String getFileAbsolutePath() { 
     return fileAbsolutePath; 
    } 

    public void setFileAbsolutePath(String fileAbsolutePath) { 
     this.fileAbsolutePath = fileAbsolutePath; 
    } 

    public String getFilename() { 
     return filename; 
    } 

    public void setFilename(String filename) { 
     this.filename = filename; 
    } 

    public String getMimeType() { 
     return mimeType; 
    } 

} 

UPDATE

\ SRC \ dataFiles \ 998 \ validateFiles(アクセスが拒否されました) 私のすべてのFileResourcesが同じパスを指していると思っています...なぜこれが起こっていますか?

答えて

0

IceFacesページに複数のoutputResourceタグを使用すると奇妙な動作があったというバグの報告がありました。このリンクを参照してくださいhttp://jira.icefaces.org/browse/ICE-3667 私はこれがツリーと多くのoutputResourceタグを持っていたと思います。

さらに、私はoutputResourceタグを使って、レンダリング時にObjectを作成することを読んでいます(または、JSFや、すべてのものに新しくなったようなもの)、それはメモリを消費していました。サーブレットを使用してダウンロードを実行する(あなたがすべてのこのようなものに新しいしている場合)あなたはCustom download servlet

http://balusc.blogspot.com/2007/07/fileservlet.htmlに有益な情報を見つけることができ、だから、サーブレットを実装する方が良いでしょう http://www.dantoomeysoftware.com/pencils-down/2009/09/08/dont-use-icefaces-resource-for-download-use-a-download-servlet/

を参照してください。