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