検証の決定に基づいてコンポーネントを選択 (およびフォーカス) することを実装しようとしています。
例えば:
- ログインフォーム (2 つの入力: ユーザー名、パスワード、1 つの送信ボタン)
- 検証が失敗した場合、
username
フォーカス<h:inputText id="name">
されます - 検証が失敗した場合、
password
フォーカス<h:inputSecret id="password">
されます - ページは更新されません。送信はajaxボタンです
私が試したこと:
ajax呼び出しなし(これは正常に機能しています-componentId
検証プロセスでBeanに設定され、ページの更新/送信ごとに選択/フォーカスされます):
$(document).ready(function() {
document.getElementById('form:#{bean.componentId}').focus();
document.getElementById('form:#{bean.componentId}').select();
});
...
<h:commandButton id="save" action="#{bean.save}" type="submit"/>
しかし、 ajax呼び出しでは:
function myFunc(data) {
if (data.status == "success") {
var element = document.getElementById('form:#{bean.componentId}');
element.focus();
element.select();
}}
...
<h:commandButton id="save" action="#{bean.save}" type="submit">
<f:ajax execute="@form" render="@form" onevent="myFunc"/>
</h:commandButton>
この方法も機能していますが、問題はcomponentId
同じです (Bean の作成中に初期化されるもの)。
このトピックに関連する以前の質問:
ajax送信ボタンを使用して、検証エラーのあるフィールドを選択/フォーカスするにはどうすればよいですか?