2012-02-16 7 views
0

primefaceコンポーネントツリーのSelectListenerに問題があります。Primefaces Tree 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が再びヌルに設定されます。

ツリーの選択されたパス名を更新するための私のAJAXリクエストは、すべての現在の型付き値をリセットします。いくつかのデバッグの後、私はAJAXリクエストが私の型付きの値を無視していることを知っています。なぜなら、それらはまだコミットされていないからです。しかし、これを動作させるためにコードを変更するにはどうすればよいですか?

ご迷惑をおかけして申し訳ございません。

答えて

4

p:treeはフォーム全体を更新します。これは、フォームが再レンダリングされたことを意味します。他のフォームの入力値を保存するには、フォームonNodeSelect全体を送信するか、本当に更新が必要なフォーム要素のみを更新する必要があります。

選択したパスのためh:outputTextにIDを割り当て、p:treeのごupdate属性を変更する、など:私の神ああ、あなたは私がこの問題に取り組んでどのように多くの時間がわからない

<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

。今それは動作します。私の実際のフォームではもっと多くの要素を使用していますので、すべての要素IDを記述する前に、入力のために余裕を持たせるためにフォームIDを提供することを考えました。 非常にありがとう! – thunderhook

+0

うまくいくと聞いてよかった! –

関連する問題