Annotated Validation does not send error
mean.meanmachine.gmx.at Dec 23, 2008 9:15 PMHello,
I have entities with annotations to validate the attributes. If I update my database with a formular, validation works and I get errors send from the entities if the RegEx doesn't fit.
But if I use my registration formular, I don't get messages, except the not-null-messages from my AJAX-validation.
Perhaps you can help me and tell me, what is the problem?!?!
@Stateful @Scope(EVENT) @Name("registerAction") public class RegisterAction implements Register { @Logger Log log; @EJB private Benutzerverwaltung bv; @PersistenceContext private EntityManager em; @In private transient FacesContext facesContext; // Attribute müssen @In sein, da sonst Fehler geworfen werden @In(create = true) private Kunde kunde; @In(create = true) private Adresse adresse; @In(create = true) private Bankverbindung bankverbindung; @In(create = true) private Login login; ArrayList<Anrede> anreden; ArrayList<Bank> banken; // Attribute für Select-Felder dürfen NICHT @In sein private String anrede; private String bank; private String verify; private static String ROLLE_BEI_REGISTRIERUNG = "kunde"; public List<Anrede> anredenSelect() { anreden = new ArrayList<Anrede>(bv.findAllAnreden()); return anreden; } public List<Bank> bankenSelect() { banken = new ArrayList<Bank>(bv.findAllBanken()); return banken; } public String register() throws AnredeNotFoundException, BankNotFoundException, KundeDuplikatException, KundeCreateAdresseException, Exception { // Kunde-Liste erzeugen, die dann gebraucht wird, um den zu speichernden Kunden // an den Anwendungskern übergeben zu können. List<Kunde> kunden = new ArrayList<Kunde>(); // Kunden-Objekt zusammenbauen Anrede anrede = bv.findAnredeByAnrede(this.anrede); Bank bank = bv.findBankByName(this.bank); bankverbindung.setBank(bank); kunde.setAnrede(anrede); kunde.setBankverbindung(bankverbindung); kunde.setAdresse(adresse); kunde.setLogin(login); kunde.setRolle(ROLLE_BEI_REGISTRIERUNG); // Anmeldedatum generieren Calendar calendar = new GregorianCalendar(); calendar.setTimeZone(TimeZone.getTimeZone("ECT")); Date anmeldeDatum = calendar.getTime(); kunde.setAnmeldeDatum(anmeldeDatum); // Den neuen Kunden in die kunden-Liste hinzufügen kunden.add(kunde); // Temporäre Collection für die zurückgelieferten Kunden anlegen Collection<Kunde> tmp = null; try { // Eintrag des neuen Kunden in die DB tmp = bv.createKunden(kunden); } catch(KundeDuplikatException kde) { throw kde; } catch(KundeCreateAdresseException kcae) { throw kcae; } catch(Exception e) { throw e; } log.info(kunde); facesContext.addMessage(null, new FacesMessage("Registrierung erfolgreich!")); return ""; } public String getVerify() { return verify; } public void setVerify(String verify) { this.verify = verify; } @Remove public void destroy() {} }
I deleted getter and setter for the attributes - don't wonder.
This is an example for my validation in the entity:
And this is my register.xhtml
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns:a4j="http://richfaces.org/a4j" xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich" template="layout/template.xhtml"> <ui:define name="body"> <h:messages globalOnly="true" styleClass="message" style="width: 150px;" id="globalMessages" /> <h2>#{messages['website.headline.personalData']}</h2> <h:form id="register" styleClass=""> <label class="formularFelder">#{messages['website.label.title']}:</label> <h:selectOneMenu value="#{registerAction.anrede}" id="anrede" styleClass="selectFelder" required="true" requiredMessage="#{messages['website.validation.error.titleRequired']}"> <s:selectItems var="anrede" value="#{registerAction.anredenSelect()}" label="#{anrede.anrede}" itemValue="#{anrede.anrede}" noSelectionLabel="#{messages['website.select.selectTitle']}"/> </h:selectOneMenu> <h:message for="anrede" styleClass="inputError" /><br class="inputBreak" /> <label class="formularFelder">#{messages['website.label.surname']}:</label><h:inputText id="vorname" value="#{kunde.vorname}" styleClass="inputFelder" required="true" requiredMessage="#{messages['website.validation.error.surnameRequired']}" /> <h:message for="vorname" styleClass="inputError" /><br class="inputBreak" /> <label class="formularFelder">#{messages['website.label.name']}:</label><h:inputText id="name" value="#{kunde.name}" styleClass="inputFelder" required="true" requiredMessage="#{messages['website.validation.error.nameRequired']}" /> <h:message for="name" styleClass="inputError" /><br class="inputBreak" /> <label class="formularFelder">#{messages['website.label.dateOfBirth']}:</label><rich:calendar id="date" value="#{kunde.gebDatum}" datePattern="yyyy-MM-dd" inputClass="inputFelder" inputStyle="width: 131px;" required="true" requiredMessage="#{messages['website.validation.error.dateOfBirthRequired']}" /> <h:message for="date" styleClass="inputError" /><br class="inputBreak" /> <label class="formularFelder">#{messages['website.label.phoneNumber']}:</label><h:inputText id="telefon" value="#{kunde.telefon}" styleClass="inputFelder" /> <h:message for="telefon" styleClass="inputError" /><br class="inputBreak" /> <label class="formularFelder">#{messages['website.label.mobileNumber']}:</label><h:inputText id="handy" value="#{kunde.handy}" styleClass="inputFelder" /> <h:message for="handy" styleClass="inputError" /><br class="inputBreak" /> <h2>#{messages['website.headline.address']}</h2> <label class="formularFelder">#{messages['website.label.street']} | #{messages['website.label.houseNumber']}:</label><h:inputText id="strasse" value="#{adresse.strasse}" styleClass="inputFelder" style="width: 120px; margin-right: 5px;" required="true" requiredMessage="#{messages['website.validation.error.streetRequired']}" /><h:inputText id="hausnr" value="#{adresse.hausnr}" styleClass="inputFelder" style="width: 22px;" required="true" requiredMessage="#{messages['website.validation.error.houseNumberRequired']}" /> <h:message for="strasse" styleClass="inputError" /><h:message for="hausnr" styleClass="inputError" /><br class="inputBreak" /> <label class="formularFelder">#{messages['website.label.postal']} | #{messages['website.label.city']}:</label><h:inputText id="plz" value="#{adresse.plz}" styleClass="inputFelder" style="width: 35px; margin-right: 5px;" required="true" requiredMessage="#{messages['website.validation.error.postalRequired']}" /><h:inputText id="ort" value="#{adresse.ort}" styleClass="inputFelder" style="width: 107px;" required="true" requiredMessage="#{messages['website.validation.error.cityRequired']}" /> <h:message for="plz" styleClass="inputError" /><h:message for="ort" styleClass="inputError" /><br class="inputBreak" /> <h2>#{messages['website.headline.bankDetails']}</h2> <label class="formularFelder">#{messages['website.label.bank']}:</label> <h:selectOneMenu value="#{registerAction.bank}" id="bank" styleClass="selectFelder" required="true" requiredMessage="#{messages['website.validation.error.bankRequired']}"> <s:selectItems var="bank" value="#{registerAction.bankenSelect()}" label="#{bank.bank}" itemValue="#{bank.bank}" noSelectionLabel="#{messages['website.select.selectBank']}" /> </h:selectOneMenu> <h:message for="bank" styleClass="inputError" /><br class="inputBreak" /> <label class="formularFelder">#{messages['website.label.accountNumber']}:</label><h:inputText id="kontonummer" value="#{bankverbindung.kontonummer}" styleClass="inputFelder" required="true" requiredMessage="#{messages['website.validation.error.accountNumberRequired']}" /> <h:message for="kontonummer" styleClass="inputError" /><br class="inputBreak" /> <h2>#{messages['website.headline.loginData']}</h2> <label class="formularFelder">#{messages['website.label.email']}:</label><h:inputText id="email" value="#{login.email}" styleClass="inputFelder" required="true" requiredMessage="#{messages['website.validation.error.emailRequired']}" /> <h:message for="email" styleClass="inputError" /><br class="inputBreak" /> <label class="formularFelder">#{messages['website.label.password']}:</label><h:inputText id="passwort" value="#{login.passwort}" styleClass="inputFelder" required="true" requiredMessage="#{messages['website.validation.error.passwordRequired']}" /> <h:message for="passwort" styleClass="inputError" /><br class="inputBreak" /> <label class="formularFelder">#{messages['website.label.password']}:</label> <!--h:inputText id="name" value="#{kunde.name}" styleClass="inputFelder" required="true" requiredMessage="#{messages['website.validation.error.passwordRequired']}" /><h:message for="name" styleClass="inputError" /--><br class="inputBreak" /> <label class="formularFelder"></label><h:commandButton action="#{registerAction.register()}" value="#{messages['website.button.register']}" styleClass="submitButton"/> </h:form> </ui:define> </ui:composition>
Hopefully you can help me getting this work.
Thanks and best regards,
Dirk
PS: I wish you a merry Xmas!