Primefaces Tree SelectListener重置其他表单输入

时间:2012-02-16 10:23:39

标签: jsf tree primefaces

我遇到了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请求忽略了我所有的类型值,因为它们尚未提交(就像我们提交表单一样)。但是,如何更改代码才能使其正常工作?

任何帮助都会受到赞赏,并提前抱歉我的英语不好!

1 个答案:

答案 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>