Primefaces Tree SelectListener сбрасывает другие входные данные формы - PullRequest
0 голосов
/ 16 февраля 2012

У меня проблема с 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>

Функция onNodeSelect в моем компоненте выглядит следующим образом:

public void onNodeSelect(NodeSelectEvent event) {  
    //get the selected data and set it
    this.chosenPathString = //selected Text;
} 

Обычно это работает - означает, что после AJAX-запроса отображается выбранный путь. Однако если я введу некоторый текст в поле ввода createGroupName, а затем выберу узел, после запроса AJAX createGroupName снова будет установлен в значение null.

Таким образом, мой AJAX-запрос на обновление выбранного пути к дереву сбрасывает все мои текущие введенные значения . После некоторой отладки я обнаружил, что запрос AJAX игнорирует все мои введенные значения, потому что они еще не зафиксированы (как если бы я отправил форму). Но как я могу изменить свой код, чтобы заставить это работать?

Буду признателен за любую помощь, и извините за мой плохой английский заранее!

1 Ответ

4 голосов
/ 16 февраля 2012

Ваш p:tree обновляет всю форму. Это означает, что форма перерисована. Чтобы сохранить другие входные значения формы, необходимо либо отправить всю форму onNodeSelect, либо обновить только те элементы формы, которые действительно необходимо обновить.

Назначьте идентификатор для h:outputText для выбранного пути и измените свой атрибут 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>
...