JSF+PrimeFacesでWebアプリケーションをビルドしています。Webフォームで、primefacesのコマンドボタンのdisableプロパティをtrueに設定しました。フォーム入力フィールドでカスタムクライアント側の検証を実行した後にフォームが読み込まれる場合、フォームへのユーザー入力に応じて、コマンドボタンのdisableプロパティをfalseまたはtrueに設定します。 注:ここで、すべての検証がボタンを通過すると有効になりますが、同時にユーザーが一部の入力を編集して検証が失敗すると、ボタンは再び無効になります。
<p:commandButton id="saveButton" value="Save" actionListener="#{some method of bean}"
update="component to update" disabled="true" />
しかし、ボタンが正しく機能しません。つまり、フォームが送信されていません。
ただし、ボタンのdisabledプロパティが最初にtrueに設定されていない場合、カスタム検証中であっても、(上記で説明したように)javascriptによって無効/有効になります。これは正常に機能します。
javascriptで設定しているのに、このフォームの送信がコマンドボタンのdisabledプロパティの初期値にどのように依存しているか理解できません。
ブラウザのソースに示されているHTMLコードは次のとおりです。
プロパティが無効になっている場合はtrueに設定します。
<button id="saveButton"
class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
type="submit"
onclick="PrimeFaces.ab({formId:'createAccessPrivilegeForm',source:'saveButton',process:'@all',update:'centerPanel leftNavigationForm:leftNavigationTabView'});return false;"
name="saveButton"
role="button"
aria-disabled="false">
無効なプロパティがfalseに設定されている場合:
<button id="saveButton"
class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only ui-state-disabled"
disabled="disabled"
type="submit"
onclick="PrimeFaces.ab({formId:'createRoleForm',source:'saveButton',process:'@all',update:'centerPanel leftNavigationForm:leftNavigationTabView'});return false;"
name="saveButton"
role="button"
aria-disabled="true">
このシナリオを処理するのを手伝ってください。コマンドボタンを最初は無効にするだけにしたいのですが、検証が完了した後でのみ無効にし、フォームの送信ができるようにしたいのです。