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.korh...@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.matth...@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:jankeesvanan...@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.matth...@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.k...@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 >