2011-08-02 26 views
3

私は、フォルダ(モジュール)とサブフォルダ(割り当て)に配置されたファイルを追加するために、backing beanを持つprimefaces 3.0.M2を使用しています。私はそれをうまくやっていましたが、ファイルをダウンロード可能にすることはできません。私は、通常のテキストではなく、特定のファイルをダウンロードするためのボタンとしてファイルを作成したいと思います。以下のJSFコードをチェックしてください:ここではprimefacesツリーを使用してファイルをダウンロードする方法

<p:tree id="tree" value="#{files.root}" var="doc" selectionMode="single" 
    selection="#{files.selectedTreeNode}"> 
      <p:treeNode> 
       <h:outputText value="#{doc}"/> 
      </p:treeNode> 
     </p:tree> 

は私のバッキングBeanクラスです:

public class FilesBean implements Serializable { 

private TreeNode root; 

public TreeNode getRoot() { 
    root = new DefaultTreeNode("root", null); 
    TreeNode general = new DefaultTreeNode("General", root); 
    TreeNode module = null; 
    TreeNode assignment = null; 
    TreeNode fileNode = null; 

    if(getMoudles()!=null) 
    { 
     for(String s : getMoudles()) 
     { 
       module = new DefaultTreeNode(s, root); 
       if(getAssignments()!=null) 
       { 
        for (Assignments as : getAssignments()) 
        { 
         if(as.getMoudleid().equals(s)) 
         assignment = new DefaultTreeNode(as.getAssignmentsPK().getAssignmentid(), module); 

         for(Files file : getFiles()) 
         { 
          if (file.getFilesPK().getAssignmentid().equals(as.getAssignmentsPK().getAssignmentid()) && file.getThemodule().equals(s)) 
          {fileNode = new DefaultTreeNode(file,assignment);} 
         } 
        } 
       } 
     } 
    } 

    return root; 
} 

PS:PrimeFaces 3.0.M2、JSF 2.0、J2EE 6ウェブ、サーブレット3.0、Glassfishの3.0、EJB 3.0 、ブラウザ:IE8もFireFox 3.6.12で試しました

答えて

3

<p:fileDownload><p:commandButton>を試しましたか?あなたのバッキングBeanで

<p:commandButton 
     value="Download" 
     title="Download" 
     image="ui-icon-arrowthick-1-s" 
     ajax="false"> 
    <p:fileDownload value="#{myBean.fileStreamedContent}" /> 
</p:commandButton> 

(例示の目的のために、あなたのファイルは、JPEGファイルと仮定):

public StreamedContent getFileStreamedContent() { 
    try { 
     InputStream is = new BufferedInputStream(
      new FileInputStream("/your/file/path/fileXYZ.jpg")); 
     return new DefaultStreamedContent(is, "image/jpeg", "fileXYZ.jpg"); 
    } catch (FileNotFoundException e) { 
    } 
} 

最後の部分は、特定のツリーノードで特定のファイルを関連付けています。 <p:tree>アトリビュートselectionMode="single"selection="#{myBean.selectedTreeNode}"を使用できます。ユーザーがツリーノードを選択すると、selectedTreeNodeが(設定メソッドを介して)Beanに設定されます。 getFileStreamedContent()方法で

private TreeNode selectedTreeNode; 

public void setSelectedTreeNode(TreeNode selectedTreeNode) { 
    this.selectedTreeNode = selectedTreeNode; 
    if (this.selectedTreeNode != null) { 
     Object yourTreeNodeData = this.selectedTreeNode.getData(); 
     // do whatever you need to do with the data object... 
    } 
} 

、ちょうどFileInputStream()コンストラクタのパラメータとして、あなたのツリーノードオブジェクトに格納されたファイル名を使用します。

EDIT

のではなく、木にコマンドボタンを埋め込むページのどこか1つのコマンドボタンを提供しようとし。ツリーノードを選択すると、関連付けられたファイル(ダウンロードする)をBeanのプロパティとして設定できます。あなたのツリーは次のようになります

<p:tree 
     value="#{myBean.rootTreeNode}" 
     var="node" 
     selectionMode="single" 
     selection="#{myBean.selectedTreeNode}"> 
    <p:ajax event="select" listener="#{myBean.onNodeSelect}" /> 
    <p:ajax event="unselect" listener="#{myBean.onNodeUnselect}" /> 
</p:tree> 

public void onNodeSelect(NodeSelectEvent event) { 
    // put some logging here... 
} 

public void onNodeUnselect(NodeUnselectEvent event) { 
    // put some logging here... 
} 

ツリーのノードをクリックするとセッターが呼び出されていることを確認するために、setSelectedTreeNode方法でのprintlnや伐採文を入れてください。 TreeNodegetData()メソッドを使用して、ツリーの作成時に最初に入れたデータ値を取得し直してください。 getFileStreamedContent()メソッドは、その値を使用して、ツリーノードをクリックしてユーザーが選択した正しいファイルを配信します。

+0

この回答は、 –

+0

を指定していないため、PrimeFaces 3.0を使用していることを前提としています。いいえ、私はPrimeFaces 2.2.1を使用しています。答えジムのおかげで、私はまだそれを試してhavent、私は今それを試してみよう!歓声 – fareed

+0

コマンドボタンオプションを使用しましたが、コマンドボタンをツリーに置くたびに、ツリーノードもレンダリングもコマンドボタンも表示されません。 – fareed

関連する問題