我有一个带有primefaces树组件和一个简单框的页面。每次选择树节点时,都应更新框和树本身。如果我只为盒子设置更新值,它可以正常工作,但如果我也为树本身设置它,它只能工作一次。 我猜javascript和树初始化存在问题。
我的xhtml内容(doens'to工作 - 在更新中删除“myTree”然后它可以工作):
<p:tree id="myTree" value="#{anyBean.someNodes}" var="node"
selectionMode="single" selection="#{anyBean.selectedNode}">
<p:ajax event="select" update="myTree :#{component.parent.namingContainer.clientId}:bla"
listener="#{anyBean.selectionChanged}" />
<p:treeNode>
<h:outputText value="#{node}" />
</p:treeNode>
</p:tree>
<p:outputPanel id="bla">
<div id="some-refresh-counter" />
<script>
jQuery('#some-refresh-counter').text( (new Date()).getTime() );
</script>
</p:outputPanel>
我的豆子:
@ViewScoped
@ManagedBean
public class AnyBean implements Serializable {
private static final long serialVersionUID = 3034385964446796122L;
private static Log LOG = LogFactory.getLog(AnyBean.class);
private TreeNode someNodes;
private TreeNode selectedNode;
@PostConstruct
public void init() {
this.someNodes = new DefaultTreeNode("Root");
new DefaultTreeNode("A", this.someNodes);
new DefaultTreeNode("B", this.someNodes);
new DefaultTreeNode("C", this.someNodes);
new DefaultTreeNode("D", this.someNodes);
new DefaultTreeNode("E", this.someNodes);
this.selectedNode = null;
LOG.debug("initialized...");
}
public void selectionChanged(NodeSelectEvent event) {
LOG.debug("selection changed to " + event.getTreeNode().getData());
}
public TreeNode getSomeNodes() {
return someNodes;
}
public void setSomeNodes(TreeNode someNodes) {
this.someNodes = someNodes;
}
public TreeNode getSelectedNode() {
return selectedNode;
}
public void setSelectedNode(TreeNode selectedNode) {
this.selectedNode = selectedNode;
}
}
我正在使用:
亲切的问候
修改 我刚刚发现,如果我将update属性设置为包含表单的名称,它将完美地工作。例如:
<h:form id="fooform">
<p:tree id="myTree" value="#{anyBean.someNodes}" var="node"
selectionMode="single" selection="#{anyBean.selectedNode}">
<p:ajax event="select" update=":fooform"
listener="#{anyBean.selectionChanged}" />
但是,一旦我使用 EL ,它就会停止工作:
<h:form id="fooform">
<p:tree id="myTree" value="#{anyBean.someNodes}" var="node"
selectionMode="single" selection="#{anyBean.selectedNode}">
<p:ajax event="select" update="#{":fooform"}"
listener="#{anyBean.selectionChanged}" />
编辑#2(解决方法)
我认为问题是-tag。我删除了它并添加了一个命令链接到我的节点outputtext,更新工作正常,但selectedNode属性没有更新。 这就是为什么我仍然使用-tag,但在完成时执行jQuery,点击更新表单的命令链接:
<h:form id="fooform">
<p:commandLink style="display: none;" id="refresh-link" value="refresh-link" update="#{component.namingContainer.clientId}" />
<p:tree id="myTree" value="#{anyBean.someNodes}" var="node"
selectionMode="single" selection="#{anyBean.selectedNode}">
<p:ajax event="select" update=":fooform"
listener="#{anyBean.selectionChanged}"
oncomplete="jQuery('#' + jQuery(this)[0].source.split(':').shift() + '\\:refresh-link').click()" />
<p:treeNode>
<h:outputText value="#{node}" />
</p:treeNode>
</p:tree>