2012-02-16 4 views
0

У меня проблема с SelectListener дерева компонентов.Дерево Primefaces 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 показан выбранный путь , Однако, если я вводю некоторый текст int в поле ввода createGroupName, а затем выберите узел, после запроса AJAX createGroupName будет снова установлен на null.

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

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

ответ

4

Ваш 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> 
+0

О мой бог, вы не знаете, сколько часов я работал над этой проблемой. Теперь это работает. В моей фактической форме я использую много других элементов, поэтому я думал, прежде чем писать все идентификаторы элементов, я просто предоставляю идентификатор формы, чтобы сэкономить некоторое время для ввода. Спасибо вам большое! – thunderhook

+0

Приятно слышать, что он работает! –

Смежные вопросы