Ich möchte, dass meine Anzeige sichtbar bleibt, wenn ich auf eine Befehlsschaltfläche klicke und die ausgeführte Methode eine Fehlermeldung aufruft.Verhindern, dass sich ein Rich: PopupPanel nach dem Klicken auf eine Befehlsschaltfläche schließt
Um genauer zu sein habe ich einen Validator für ein Eingabefeld, das ein Datum bekommen sollte. Wenn dieses Datum nicht gültig ist, erstellt meine Validierungsmethode im Backing Bean eine Fehlermeldung. Dies sollte nach dem Verwenden der Befehlsschaltfläche neben dem Eingabefeld im Popup-Fenster angezeigt werden.
Durch Klicken auf die Befehlsschaltfläche wird das Popup jedoch geschlossen. Aber wenn ich es wieder öffne, wird die Fehlermeldung angezeigt, was mich wundern lässt, warum es überhaupt geschlossen wurde, als die maximumSeverity-Bedingung nicht erfüllt wurde.
Meine xhtml Seite:
<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>
Meine Validierungsmethode in dem Backing Bean:
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 hat kein 'oncomplete' Attribut. – Makhiel
Oh, nun, danke! Aber wenn ich a4j: commandButton verwende, kommt ein anderes Problem auf: Wenn ich versuche, ein falsches Datum zu senden, wird das Popup nicht wie gewünscht schließen, aber keine Fehlermeldung wird angezeigt. – Marco
Sie müssen den Ort, an dem die Nachricht ist, rendern. Übrigens. Es wird nur etwas angezeigt, wenn die Validierung für newVorGueltigAb fehlschlägt.Schauen Sie sich also 'h: messages' oder' rich: messages' für das gesamte Formular an. BTW2. Sie müssen 'ValidatorException' auslösen, wenn die Validierung fehlschlagen soll. –