myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jan-Kees van Andel <jankeesvanan...@gmail.com>
Subject Re: Bean Validation (JSR 303)
Date Mon, 27 Sep 2010 19:55:15 GMT
Yeah, but there is more. First, did you package the myfaces jars in the
application or in a shared library or something? And the same question for
the validation api and impl jars

And this Class.forName check is not the complete check. After Class.forName,
we completely initialize the bean validation framework, using the default
factory. If this fails, I decided to disable bean validation. But in this
case, you should see more logging. For example the error message, explaining
why the beanval initialization failed.

You can set the logger for "javax.faces.validator" to "fine" to see the
error message, if any. Otherwise, putting a breakpoint in
the javax.faces.validator.BeanValidator.createValidatorFactory() method and
stepping into _ExternalSpecifications.isBeanValidationAvailable() would also
be a very good first step.

@Committers: I decided to log it as fine a year ago, because I can't decide
whether or not the exception is important. I didn't want to irritate and
scare developers when there is no issue. But we might be better off logging
it as info, for cases like this one. Or maybe a second catch clause for
specific bean validation exceptions that logs its messages as info. But then
again, not every exception thrown by the buildDefaultValidatorFactory has to
be that type. For example, NoClassDefFoundErrors could also occur. What do
you think?

Regards,
Jan-Kees

2010/9/27 Jakob Korherr <jakob.korherr@gmail.com>

> Hi,
>
> That's weird, because ExternalSpecifications does this:
>
> beanValidationAvailable =
> (Class.forName("javax.validation.Validation") != null);
>
> Thus it will be true if javax.validation.Validation is on the classpath!
>
> Regards,
> Jakob
>
> 2010/9/27 Matthias Niehoff <niehoff.matthias@googlemail.com>:
> > Hey,
> >
> > I get this message:
> > 27.09.2010 15:57:32 org.apache.myfaces.util.ExternalSpecifications
> > isBeanValidationAvailable
> > INFO: MyFaces Bean Validation support disabled
> > I double checked the classpath. javax.validation.Validation is on it.
> >
> > Regards
> >
> > Matthias
> >
> > -----Urspr√ľngliche Nachricht-----
> > Von: Jan-Kees van Andel [mailto:jankeesvanandel@gmail.com]
> > Gesendet: Montag, 27. September 2010 13:52
> > An: MyFaces Discussion
> > Betreff: Re: Bean Validation (JSR 303)
> >
> > Hey,
> >
> > If you specify javax.faces.VALIDATE_EMPTY_FIELDS=auto, MyFaces will look
> for
> > a class named javax.validation.Validation on the classpath. If it is
> found,
> > it will try to initialize it, using:
> > Validation.buildDefaultValidatorFactory().getValidator();
> >
> > This call may fail, for instance, because of a configuration error in
> your
> > bean validation code. And if it does, MyFaces will catch this error and
> log
> > an error message: "Error initializing Bean Validation (could be normal)"
> >
> > Afterwards, you should see a message in the log: "MyFaces Bean Validation
> > support enabled" or "MyFaces Bean Validation support disabled", depending
> on
> > whether initalization succeeded or not.
> >
> > Do you see those log messages?
> >
> > Regards,
> > Jan-Kees
> >
> >
> > 2010/9/27 Matthias Niehoff <niehoff.matthias@googlemail.com>
> >
> >> Yes, using Hibernate Validator 4.1.0 Final and Validation API 1.0.0.
> >> Is there anything else to configure?
> >>
> >> Regards
> >> Matthias
> >>
> >> -----Urspr√ľngliche Nachricht-----
> >> Von: Michael Kurz [mailto:michi.kurz@gmx.at]
> >> Gesendet: Montag, 27. September 2010 13:33
> >> An: users@myfaces.apache.org
> >> Betreff: Re: Bean Validation (JSR 303)
> >>
> >> Do you have a bean validation implementation like Hibernate Validator
> >> on your classpath?
> >>
> >> regards
> >> Michael
> >>
> >> Am 27.09.2010 13:21, schrieb Matthias Niehoff:
> >> > Hi,
> >> >
> >> > I'm trying to realize Bean Validation. I annotated my attributes and
> >> > set javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL true.
> >> > Furthermore I added a h:message tag in my form. When I test the
> >> > validation nothing happens. The input is accepted (and in my case
> >> persisted).
> >> > Relevant parts of the Code:
> >> >
> >> > Web.xml
> >> >
> >> >      <context-param>
> >> >
> >> > <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_N
> >> > UL
> >> > L</par
> >> > am-name>
> >> >          <param-value>true</param-value>
> >> >      </context-param>
> >> >
> >> >          <context-param>
> >> >          <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
> >> >          <param-value>auto</param-value>
> >> >      </context-param>
> >> >
> >> > User.java
> >> >
> >> > import javax.validation.constraints.NotNull;
> >> > import org.hibernate.validator.constraints.Email;
> >> >
> >> > public class User {
> >> >       @NotNull
> >> >       private String nachname;
> >> >       @NotNull
> >> >       private String vorname;
> >> >       @NotNull
> >> >       private String userID;
> >> >       @NotNull
> >> >       private String password;
> >> >       @NotNull
> >> >       @Email
> >> >       private String email;
> >> >       @NotNull
> >> >       private String role;
> >> > ...
> >> > }
> >> >
> >> > UserBean.java
> >> >
> >> > @ManagedBean
> >> > @SessionScoped
> >> > public class UserBean {
> >> >
> >> >       private User user = new User();
> >> >
> >> >       public void setUser(User user) {
> >> >               this.user = user;
> >> >       }
> >> >
> >> >       public User getUser() {
> >> >               return user;
> >> >       }
> >> >
> >> >       public String save() {
> >> >               [...]
> >> >               return "/admin/user/showUser.xhtml";
> >> >       }
> >> > [...]
> >> > }
> >> >
> >> > And last but not least:
> >> > editUser.xhtml
> >> >
> >> > <body>
> >> > <h:form id="form">
> >> >       <h:messages showDetail="true" showSummary="false" />
> >> >       <h:panelGrid columns="2" id="grid">
> >> >               <h:outputLabel value="Vorname:" for="firstName" />
> >> >               <h:inputText id="firstName"
> >> value="#{userBean.user.vorname}"
> >> > />
> >> >               <h:outputLabel value="Nachname:" for="lastName" />
> >> >               <h:inputText id="lastName"
> >> value="#{userBean.user.nachname}"
> >> > />
> >> >               <h:outputLabel value="Email:" for="email" />
> >> >               <h:inputText id="email" value="#{userBean.user.email}"
> />
> >> >               <h:outputLabel value="Rolle:" for="role" />
> >> >               <h:inputText id="role" value="#{userBean.user.role}" />
> >> >               <h:outputLabel value="Passwort:" for="password" />
> >> >               <h:inputSecret id="password"
> >> > value="#{userBean.user.password}" />
> >> >               <h:commandButton id="save" action="#{userBean.save}"
> >> > value="Speichern" />
> >> >       </h:panelGrid>
> >> > </h:form>
> >> > </body>
> >> >
> >> > Did I miss a point?  I thougt it would only be annotating the Beans.
> >> >
> >> > Thanks for your help!
> >> >
> >> > Matthias Niehoff
> >> >
> >>
> >>
> >
> >
>
>
>
> --
> Jakob Korherr
>
> blog: http://www.jakobk.com
> twitter: http://twitter.com/jakobkorherr
> work: http://www.irian.at
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message