我正在用primefaces树组件编写一些页面。我想在树节点选择后更新outputLabel。标签应显示当前选定节点的名称。我的问题在于primefaces在托管bean中为此事件启动监听器。 Listener方法根本不会被调用。我能够更新outputLabel(使用其他bean的当前时间值),但我不能使用侦听器方法。这里是我的网页片段():p:没有调用树节点select listener
<p:tree value="#{directoryTreeBuilder.root}"
var="node"
dynamic="true"
style="border: none;"
selectionMode="single"
selection="#{directoryTreeBuilder.selected}">
<p:ajax event="select"
listener="#{directoryTreeBuilder.onDirSelected}"
update=":currentDir"/>
<p:treeNode>
<h:outputText value="#{node}" />
</p:treeNode>
</p:tree>
...
<h:outputText id="currentDir" value="#{directoryTreeBuilder.selected}" />
这里被管理的Bean:
@Named(value = "directoryTreeBuilder")
@SessionScoped
public class DirectoryTreeBuilder implements Serializable {
/**
* Directory facade bean.
*/
@EJB
private DirectoryFacadeLocal dirBean;
/**
* Tree structure root directory.
*/
private TreeNode root;
/**
* Current selected directory.
*/
private DefaultTreeNode selected;
/**
* Bean initialization method.
*/
@PostConstruct
public void init() {
//Root initiation.
}
/**
* Root getter.
* @return root directory with structure;
*/
public TreeNode getRoot() {
return root;
}
/**
* Get selected directory node.
* @return primefaces treenode;
*/
public TreeNode getSelected() {
return selected;
}
public void setSelected(TreeNode selected) {
this.selected = (DefaultTreeNode) selected;
}
/**
* Selected event listener method.
* @param e selection from primefaces
*/
public void onDirSelected(NodeSelectEvent e) {
System.err.println("DIR SELECTED!");
this.selected = (DefaultTreeNode) e.getTreeNode();
}
}
目前我正在从NetBeans的Glassfish的V4 8封装此代码。首先我使用PrimeFaces 4.0,但现在它在PrimeFaces 5.1上运行。没有效果。
UPDATE:整页代码:http://pastebin.com/vEPtWtw2
我认为你的问题来自你没有显示的xhtml代码。 – wittakarn 2014-11-02 11:30:46
使用pastebin添加完整页面代码(在OP中)。 – 2014-11-02 13:12:19