私はこの小さなフォームを持っており、JSF検証でのajaxの使用を理解しようとしています。これがフォームです。(バッキングBeanは、firstNameとlastNameの2つの変数を持つ単純なBeanです。)
<h:form>
<h:outputLabel for="firstName" value="First Name: " />
<h:inputText id="firstName" value="#{userBean.firstName}">
<f:validateLength minimum="5" />
<f:ajax event="keyup" render="firstNameMsg" />
</h:inputText>
<h:message id="firstNameMsg" for="firstName" style="color: red" />
<br />
<h:outputLabel for="lastName" value="Last Name: " />
<h:inputText id="lastName" value="#{userBean.lastName}">
<f:validateLength minimum="5" />
<f:ajax event="keyup" render="lastNameMsg" />
</h:inputText>
<h:message id="lastNameMsg" for="lastName" style="color: red" />
<br />
<h:commandButton value="Submit">
<f:ajax execute="firstName lastName" render=":greeting" />
</h:commandButton>
<br />
</h:form>
<h:outputText id="greeting" value="#{userBean.greeting}" />
ボタンにajaxをアタッチして、送信時に出力テキストタグを名と姓でレンダリングします。これは問題ありません。私の質問は、2つのフィールドを検証するために、タグと一緒にf:ajax
タグを使用する必要があるのはなぜですか?私の理解では、ajaxはレンダリング応答フェーズまでのすべてのライフサイクルフェーズを実行します。つまり、検証が含まれます。検証フェーズでは、ajaxリクエストからのものか、通常の送信/アクションリクエストからのものかに関係なく、メッセージを含むページが再レンダリングされませんか?入力フィールドに添付されているajaxタグを削除すると、検証メッセージは表示されませんが、ajaxを完全に削除し、commandButtonsアクションイベントを使用して通常の送信を使用すると表示されます。f:validateLength