Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用primefaces树下载文件_Java_Jsf_Tree_Primefaces - Fatal编程技术网

Java 如何使用primefaces树下载文件

Java 如何使用primefaces树下载文件,java,jsf,tree,primefaces,Java,Jsf,Tree,Primefaces,我使用primefaces 3.0.M2和支持bean来添加排列在文件夹(模块)和子文件夹(分配)中的文件。我成功地做到了这一点,但我无法控制该文件以使其可下载。我想把这个文件作为一个按钮来下载那个特定的文件,而不仅仅是一个普通的文本。请检查下面的jsf代码: <p:tree id="tree" value="#{files.root}" var="doc" selectionMode="single" selection="#{files.selectedTreeNode}"&

我使用primefaces 3.0.M2和支持bean来添加排列在文件夹(模块)和子文件夹(分配)中的文件。我成功地做到了这一点,但我无法控制该文件以使其可下载。我想把这个文件作为一个按钮来下载那个特定的文件,而不仅仅是一个普通的文本。请检查下面的jsf代码:

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

PS:PrimeFaces 3.0.M2、JSF 2.0、J2EE 6 Web、Servlet 3.0、Glassfish 3.0、EJB 3.0、浏览器:IE8也在FireFox 3.6.12上试用过

您试过将
一起使用吗

最后一部分是将特定文件与特定树节点关联。您可以使用
属性
selectionMode=“single”
selection=“#{myBean.selectedTreeNode}”
。用户选择一个树节点,这将导致在bean上设置
selectedTreeNode

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...
    }
}
getFileStreamedContent()
方法中,只需使用树节点对象中存储的文件名作为
FileInputStream()
构造函数的参数

编辑

与其尝试在树中嵌入命令按钮,不如在页面的某个位置提供一个命令按钮。当选择树节点时,它可以将关联的文件(要下载)设置为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...
}

nodeselect上的公共无效(NodeSelectEvent事件){
//在这里放一些日志。。。
}
nodeunselect上的公共无效(NodeUnselectEvent事件){
//在这里放一些日志。。。
}

setSelectedTreeNode
方法中放入println或logging语句,以确保在单击树节点时调用setter。使用
TreeNode
上的
getData()
方法获取创建树时最初放入其中的数据值。
getFileStreamedContent()
方法将使用该值传递用户通过单击树节点选择的正确文件。

此答案假设您使用的是PrimeFaces 3.0,因为您没有指定我使用的是PrimeFaces 2.2.1。谢谢你的回答,吉姆,我还没试过,我现在就要试!Cheers我使用了command button选项,但是每当我在树中放置command button时,树节点和command按钮都不会被渲染。我在SetSelectedTreode中放置了一个printing语句,用于测试节点选择,正如u所说,但是当我选择节点时它没有被调用。我添加了一些代码。我认为不需要
,除非您想添加一个事件侦听器,但它可能是必需的。同样,我的代码使用PrimeFaces 3.0,所以我不能保证它能与旧的PrimeFaces行一起工作。
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) {
    }
}
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...
    }
}
<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...
}