コマンドボタンをクリックするとパネルが表示されたままになり、実行されたメソッドがエラーメッセージを表示します。リッチ:popupPanelがコマンドボタンをクリックした後に閉じるのを防ぐ
具体的には、日付を取得する入力フィールドのバリデータがあります。この日付が有効でない場合、バッキングBeanのvalidateメソッドがエラーメッセージを作成します。これは、コマンドボタンを使用した後、ポップアップパネルの入力フィールドの横に表示されます。
コマンドボタンをクリックするとポップアップが閉じます。しかし、私がそれを再度開くと、エラーメッセージが表示され、なぜ私はそれが最初の場所で閉じられたのか不思議に思って、maximumSeverity条件が満たされていないと思います。
マイXHTMLページ:バッキングBeanで
<h:body>
<h:commandButton id="note" value="Neuer Satz">
<rich:componentControl target="note_panel" operation="show" />
</h:commandButton>
<rich:popupPanel id="note_panel" modal="true" autosized="true"
resizeable="false" header="Neuen Mehrwertsteuersatz vormerken"
domElementAttachment="form">
Gültig ab
<h:inputText id="newVorGueltigAb"
value="#{mehrwertsteuerBean.neuGueltigAb}" maxlength="10"
validator="#{mehrwertsteuerBean.validateNewDate}" />
<h:message for="newVorGueltigAb" style="color:red" />
<h:commandButton value="Vormerken"
action="#{mehrwertsteuerBean.addSteuersatz()}"
oncomplete="if (#{facesContext.maximumSeverity==null})
#{rich:component('note_panel')}.hide(); return false;" />
<h:commandButton value="Abbrechen"
onclick="#{rich:component('note_panel')}.hide(); return false;" />
</rich:popupPanel>
</h:body>
私の検証方法:すべての
public void validateNewDate(FacesContext context, UIComponent toValidate,
Object value) {
String regex = "([0-9]{2}).([0-9]{2}).([0-9]{4})";
String date = (String) value;
if (date.matches(regex)) {
validNewDate = true;
} else {
validNewDate = false;
String message = "Bitte gültiges Datum eingeben!";
context.addMessage(toValidate.getClientId(context),
new FacesMessage(message));
}
}
h:commandButtonには 'oncomplete'属性がありません。 – Makhiel
ああ、ありがとう! しかし、a4j:commandButtonを使用すると、別の問題が発生します。 間違った日付を送信しようとすると、ポップアップが希望どおりに閉じることはできませんが、エラーメッセージは表示されません。 – Marco
メッセージがある場所をレンダリングする必要があります。 BTW。 newVorGueltigAbの検証に失敗した場合にのみ表示されます。だからフォーム全体で 'h:messages'や' rich:messages'をチェックしてください。 BTW2。検証を失敗させるには、 'ValidatorException'をスローする必要があります。 –