我遇到了Primeface组件树的SelectListener问题。
更新:我想要做的是创建一个组并从树中选择一个路径。所以我有组名和路径树。选择路径后,在树下,应显示所选路径并通过AJAX请求进行更新。
以下是我的代码片段:
<h:form id="groupCreate">
<p:inputText id="createGroupName" value="#{groupContainer.name}" />
<p:tree id="pathTree" update="groupCreate" selectionMode="single"
selection="#{groupContainer.selectedPath}" dynamic="false"
value="#{groupContainer.rootNode}" var="node" cache="false"
nodeSelectListener="#{groupContainer.onNodeSelect}">
<p:treeNode>
<h:outputText value="#{node[1]}" title="#{node[0]}" />
</p:treeNode>
</p:tree>
<!-- Display selected Path from tree -->
<h:outputText value="#{groupContainer.chosenPathString}/>
<p:commandLink id="createButton" .../>
</h:form>
我的bean中的onNodeSelect函数如下所示:
public void onNodeSelect(NodeSelectEvent event) {
//get the selected data and set it
this.chosenPathString = //selected Text;
}
这通常有效 - 意味着在AJAX请求之后显示所选路径。但是,如果我在createGroupName
输入字段中输入一些文本,然后选择一个节点,则在AJAX请求之后createGroupName
再次设置为空。
因此,我的AJAX请求更新树的选定路径名会重置所有当前键入的值。经过一些调试后,我发现AJAX请求忽略了我所有的类型值,因为它们尚未提交(就像我们提交表单一样)。但是,如何更改代码才能使其正常工作?
任何帮助都会受到赞赏,并提前抱歉我的英语不好!
答案 0 :(得分:4)
您的p:tree
更新整个表单。这意味着表单将被重新呈现。为了保存其他表单输入值,您需要提交整个表单onNodeSelect
或仅更新真正需要更新的表单元素。
为所选路径的h:outputText
分配ID,并更改update
p:tree
属性,例如:
<h:form id="groupCreate">
<p:inputText id="createGroupName" value="#{groupContainer.name}" />
<p:tree id="pathTree" update="choosenPath" selectionMode="single"
selection="#{groupContainer.selectedPath}" dynamic="false"
value="#{groupContainer.rootNode}" var="node" cache="false"
nodeSelectListener="#{groupContainer.onNodeSelect}">
<p:treeNode>
<h:outputText value="#{node[1]}" title="#{node[0]}" />
</p:treeNode>
</p:tree>
<!-- Display selected Path from tree -->
<h:outputText id="choosenPath" value="#{groupContainer.chosenPathString}/>
<p:commandLink id="createButton" .../>
</h:form>