Hallo,
ich möchte aus einem Formular zum "Profil bearbeiten" die eingegebene Mail überprüfen. Standardmäßig steht die des angemeldeten Nutzers bereits im entsprechenden InputField. Beim Speichern soll u.a. dieses Feld auf 3 Sachen geprüft werden:
1. Ist die Mail noch die gleiche wie in der DB hinterlegt (keine Änderung)?
2. Ist die geänderte Mail noch nicht vergeben (Das Attribut ist kein Primärschlüssel, sollte trotzdem unique sein)
3. Sollte die Mail bereits vergeben sein, soll eine message ausgegeben werden, welche den Nutzer informiert.
So sieht das Feld im Formular aus:
So die Bean-Methode, welche über den Speichern-Button in dem "action"-Attribut übergeben wird:
Das Problem ist in meinen Augen, dass ich bei der "update"-Methode immer einen String, also eine .xhtml-Seite zurückgeben muss und daher die Seite wahrscheinlich sogar nach Ausgabe der richtigen Fehlermeldung neu geladen wird. Diesen benötige ich aber, um nach erfolgreichem Speichern automatisch auf die Homepage zu gelangen.
Wie kann ich das umgehen?
Eine Alternative wäre keine Seite zurückzugeben, und damit auf die automatische Weiterleitung zu verzichten, oder?
ich möchte aus einem Formular zum "Profil bearbeiten" die eingegebene Mail überprüfen. Standardmäßig steht die des angemeldeten Nutzers bereits im entsprechenden InputField. Beim Speichern soll u.a. dieses Feld auf 3 Sachen geprüft werden:
1. Ist die Mail noch die gleiche wie in der DB hinterlegt (keine Änderung)?
2. Ist die geänderte Mail noch nicht vergeben (Das Attribut ist kein Primärschlüssel, sollte trotzdem unique sein)
3. Sollte die Mail bereits vergeben sein, soll eine message ausgegeben werden, welche den Nutzer informiert.
So sieht das Feld im Formular aus:
HTML:
<b:column medium-screen="4">
<b:inputText id="mail" required="true"
validatorMessage="Deine E-Mail-Adresse ist nicht gültig. Bitte gib Deine E-Mail-Adresse erneut ein!"
requiredMessage="Deine E-Mail-Adresse ist nicht gültig. Bitte gib Deine E-Mail-Adresse erneut ein!"
label="E-Mail" placeholder="name@example.com" value="#{profilManagedBean.mail}">
<f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]"/>
<f:ajax event="blur" execute="mail" render="m_mail"/>
</b:inputText>
<b:messages id="m_mail" for="mail"/>
</b:column>
So die Bean-Methode, welche über den Speichern-Button in dem "action"-Attribut übergeben wird:
Java:
public String update() {
if (!nutzer.getPasswort().equals(tempPassword) && tempPassword != null && !tempPassword.isEmpty()) {
nutzer.setPasswort(tempPassword);
}
if (mail.equals(nutzer.getMail())) {
nutzer.addBezirk(dao.findBezirkByID(bezirkID));
updateSprachen();
updateFreizeitaktivitaeten();
dao.merge(nutzer);
refreshNutzer();
return "home";
} else if(validateMail(mail)){
nutzer.addBezirk(dao.findBezirkByID(bezirkID));
updateSprachen();
updateFreizeitaktivitaeten();
nutzer.setMail(mail);
dao.merge(nutzer);
refreshNutzer();
return "home";
}
else {
FacesContext.getCurrentInstance().addMessage("formProfil:mail", new FacesMessage(
"Diese Mail wird bereits verwendet!"));
return "profil";
}
}
Das Problem ist in meinen Augen, dass ich bei der "update"-Methode immer einen String, also eine .xhtml-Seite zurückgeben muss und daher die Seite wahrscheinlich sogar nach Ausgabe der richtigen Fehlermeldung neu geladen wird. Diesen benötige ich aber, um nach erfolgreichem Speichern automatisch auf die Homepage zu gelangen.
Wie kann ich das umgehen?
Eine Alternative wäre keine Seite zurückzugeben, und damit auf die automatische Weiterleitung zu verzichten, oder?