4

jsf2とPrimefaces3.4の使用

私は多くの同様の質問があることを知っていますが、それらのどれもこれに取り組んでいません。

panelGrid "inner"が"true"<h:panelGrid id="inner" rendered="true">)=>の固定値でレンダリングされると、コマンドボタンがクリックされた後、入力コンポーネントは#{tableMatchesBean.mergedAuthorAjax}の値を正しく更新します。

ただし、このパネルのレンダリングが条件付きの場合:<h:panelGrid rendered="#{spellCheckBean.renderInputMerge}"> =>入力コンポーネントはサイレントです(tableMatchesBean.mergedAuthorAjaxが呼び出されたというトレースはありません)。

注:ネストされたpanelGridを使用して、条件付きでレンダリングする必要のあるコンポーネント(出力コンポーネントと入力コンポーネント)の親要素にレンダリング条件を配置しました。助けていただければ幸いです。

[コメント後の編集:] xhtmlページの機能:
-ユーザーがselectOnebuttonの「merge」オプションをクリックすると、ajaxの更新により「renderInputMerge」がtrueに切り替わり、「outer」コンポーネントが表示されます。正常に動作します。このコンポーネントには、OKと表示される入力フィールドがあります。
-ユーザーがcommandLinkボタンをクリックした後、この入力フィールドの値を取得する必要があります。上で説明したように、私はそれに問題があります。

xhtml:

<h:body style ="width:100%">


    <h:form id = "currMatch">

        <h:panelGrid>

            <p:selectOneButton id ="selection" value="#{spellCheckBean.optionChosen}">
                <f:selectItem itemLabel="keep both" itemValue="1" />
                <f:selectItem itemLabel="delete both" itemValue="2" />
                <f:selectItem itemLabel="merge" itemValue="3" />
                <p:ajax update="outer" />
            </p:selectOneButton>

        </h:panelGrid>

         <h:panelGrid id="outer" >
            <h:panelGrid id="inner" rendered="#{spellCheckBean.renderInputMerge}">
            <!-- **the line above does not update**, this one does    <h:panelGrid rendered="true">-->

                <h:outputText value="our suggestion:  "  style ="margin-left: auto; margin-right: auto"/> 
                     <h:inputText id ="testinput" value="#{tableMatchesBean.mergedAuthorAjax}">
                     </h:inputText>
                </h:panelGrid>    
        </h:panelGrid>

        <p:commandButton action="#{tableMatchesBean.next_()}" 
                         title="Add"
                         value="next"
                         update ="currMatch"
                         >

        </p:commandButton>




    </h:form>
</h:body>

4

2 に答える 2

5

あなたのrendered状態は明らかにリクエストスコープの変数に依存します。例えば、リクエストスコープのマネージドBeanのプロパティやリクエストパラメータです。フォーム送信アカウントは、完全に独立したまったく新しいリクエストとしてアカウントを送信しますが、すべてのリクエストスコープのマネージドBeanが新しく再作成され、すべてのプロパティがデフォルトに設定されます。rendered送信された値の収集中に属性が評価された場合false(フォーム送信のリクエスト値の適用フェーズ)、それらは単に収集されません。

これを解決するには、基本的に2つの方法があります。

  1. 属性の背後にある条件renderedが、リクエストスコープのBeanの(ポスト)コンストラクターで適切に事前初期化されていることを確認してください。これにより、フォームの送信のリクエスト中に、フォームを表示するリクエストのときとまったく同じ値が返されます。エンドユーザー。

  2. 代わりに、Beanをビュースコープに配置します。voidこのように、Beanインスタンスは、ajaxによって、またはreturningまたはnullin actionメソッドによって同じビューと対話している限り、存続します。

参照:

于 2012-09-10T11:02:34.457 に答える
-3

の代わりにjstlc:if タグを試してくださいrendered。それは私にとってはうまくいきます。

于 2015-09-25T10:56:33.637 に答える