テキストボックスに入力した各キーの後にajax呼び出しが発生していません。ajaxは、14桁が入力された後にのみ呼び出されます
いくつかの混乱が起こっています。上記の記述は正しくありません。
ajax呼び出しは確実に呼び出されます。Webブラウザの組み込み開発者ツールセットでHTTPトラフィックを追跡します(Chrome / IE9 / FirebugでF12を押して、[ネットワーク]セクションを確認します)。/*
またはJSFでHTTPフィルターを作成するPhaseListener
と、キーを押すたびに呼び出されていることがわかります(つまり、サーバーは毎回確実にヒットします)。
おそらく実際には、で指定されているアクションリスナーメソッド<f:ajax listener>
が呼び出されていないことを意味しています。それは確かに真実です。しかし、それは完全に予想される動作です。つまり、検証エラーがあります。このようにして、JSFはUPDATE_MODEL_VALUESフェーズとINVOKE_ACTIONフェーズをスキップします。したがって、アクションメソッドは設計上実際には呼び出されません。つまり、検証エラーがある場合は、ビジネスロジックを実行しないでください。
なぜ呼び出されると思ったのかわかりません。無効な入力に対してビジネスロジックを実行するのはなぜですか?具体的な機能をより詳細に説明すると、このための適切なアプローチを提案できる可能性があります。
コメントに従って更新します。コンポーネントをビューにバインドすることで得られるdisabled
結果を確認することにより、ビュー側で完全に他のコンポーネントの属性の入力コンポーネントの有効性を確認します。UIInput#isValid()
<h:inputText ... binding="#{input}">
<f:ajax event="keyup" render="input2 input3 input4" />
<f:validateRegex pattern="[0-9]{14}" />
</h:inputText>
<h:inputText id="input2" ... disabled="#{not input.valid}" />
<h:inputText id="input3" ... disabled="#{not input.valid}" />
<h:inputText id="input4" ... disabled="#{not input.valid}" />
ajaxリスナーメソッドは必要ありません。