0

この簡単な例を考えてみましょう。このようなフォームがある場合、inputText に値を指定せずに送信すると、明らかに検証エラーが発生します。

<h:form id="testForm" prependId="false">

    <h:selectOneMenu 
        id="testSelectOneMenu" 
        value="#{backButtonTestBean.selection}">
        <f:selectItem itemValue="mickey" itemLabel="Mickey" />    
        <f:selectItem itemValue="mouse" itemLabel="Mouse" />
        <f:ajax execute="@this" render="panel" />
    </h:selectOneMenu>                 

       <h:panelGroup layout="block" id="panel">
           <h:panelGroup layout="block">
               <h:inputText id="requiredField" required="true" />
           </h:panelGroup>    
       </h:panelGroup>

       <h:commandButton value="submit" action="#{backButtonTestBean.submit}" />

</h:form>

しかし、f:ajax を使用して panelGroup を再レンダリングすると、必要な属性が受け入れられず、空の値で送信できます。

<h:form id="testForm" prependId="false">

    <h:selectOneMenu 
        id="testSelectOneMenu" 
        value="#{backButtonTestBean.selection}">
        <f:selectItem itemValue="mickey" itemLabel="Mickey" />    
        <f:selectItem itemValue="mouse" itemLabel="Mouse" />
        <f:ajax execute="@this" render="panel" />
    </h:selectOneMenu>                 

       <h:panelGroup layout="block" id="panel">
           <h:panelGroup layout="block" rendered="#{backButtonTestBean.selection == 'mouse'}">
               <h:inputText id="requiredField" required="true" />
           </h:panelGroup>    
       </h:panelGroup>

       <h:commandButton value="submit" action="#{backButtonTestBean.submit}" />

</h:form>

私はmojarra 2.1.1でテストしています。アドバイスをいただければ幸いです。

4

1 に答える 1

0

更新:私はそれを理解しました。BackButtonTestBean はリクエスト スコープ内にあったため、フォームを送信したときに testSelectOneMenu の値が「mouse」ではありませんでした。その結果、レンダリングされなかったため、バリデータは無効でした。@ViewScoped に変更し、期待どおりに動作します。

于 2011-05-04T16:09:25.747 に答える