現在、私のページには、二重送信を防ぐために、クリックすると無効になる送信ボタンがあります。
<tr:commandButton onclick="this.disabled=true;" />
ただし、フォームにエラーがある場合、送信ボタンが無効になっているため、ユーザーはフォームを再送信できません。
フォームの検証をクリアしたときにのみ送信ボタンを無効にする方法はありますか?
参考までに、私のページは次のようになります。
<rich:tabPanel headerAlignment="left" switchType="client" width="100%">
<rich:tab label="#{cfsMsgs.main_tab_label}" name="mainTab">
<rich:spacer height="20" />
<ui:include src="add_main.xhtml" />
</rich:tab>
<rich:tab label="#{cfsMsgs.qualification_tab_label}" name="qualificationTab">
<rich:spacer height="20" />
<ui:include src="add_qualification.xhtml" />
</rich:tab>
<!-- ...and so on... -->
そして、各タブには、次のような検証方法が混在しています。
<tr:inputText ...>
<tr:validateRegExp pattern="^\S.*" ... />
</tr:inputText>
...と
<tr:inputText validator="#{backingBean.validate}" ...>
</tr:inputText>
ボタンをonclick="this.disabled = [ページエラーインジケーター、たとえばpage.hasErrorなど] "のように設定することはできますか?
編集1:別の方法は、ページの送信に失敗した場合にボタンを再レンダリングすることです。次のようにコードを変更しました。
<tr:commandButton onclick="this.disabled=true;" id="btnSubmit">
<a4j:support event="oncomplete" reRender="btnSubmit" ajaxSingle="true" oncomplete="alert('done!');" />
</tr:commandButton>
a4j:supportのoncompleteイベントは、それが行われたかどうかを確認するためのものです。しかし、これを実行しようとすると、アラートは表示されませんでした。それは私がここで何か間違ったことをしているという意味ですか?