aspose file tools*
The moose likes Spring and the fly likes Validation is not working in Annotaion based controller Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Soft Skills this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Frameworks » Spring
Bookmark "Validation is not working in Annotaion based controller" Watch "Validation is not working in Annotaion based controller" New topic
Author

Validation is not working in Annotaion based controller

Abhra Kar
Ranch Hand

Joined: May 22, 2008
Posts: 124
I have a validator class----
public class UserValidator implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return User.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "firstName.required","give proper value");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastName", "lastName.required","give proper value");
}
}


A form in index.jsp---

<form:form method="POST" commandName="user">
<h3> First Name</h3>
<form:errors path="firstName" />
<form:input path="firstName" />
<h3>Last Name </h3>
<form:errors path="lastName" />
<form:input path="lastName" />
<input type="submit" value="+" />
</form:form>


A controller class---

@Controller
@RequestMapping("/userRegistration.htm")
public class UserController {
UserValidator userValidator;
@Autowired
UserController(UserValidator userValidator){
this.userValidator=userValidator;
}
@RequestMapping(method = RequestMethod.GET)
public String showUserForm(ModelMap model)
{
User user = new User();
model.addAttribute(user);
return "index";
}
@RequestMapping(method = RequestMethod.POST)
public String onSubmit(User user) {
return "result";
}
}


And dispatcher-servlet.xnl---

<context:component-scan base-package="controller" />
<bean id="userValidator" class="validator.UserValidator" />
<bean id="viewResolver"
class=" org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

All classes are placed in proper packages
The application is running but it is not validating for firstName and lastName in index.jsp.If I left places blank it is not showing any error

What changes I will have to make ?
please help
Abhra Kar
Ranch Hand

Joined: May 22, 2008
Posts: 124
please give some suggestion
i need help for this
Abhra Kar
Ranch Hand

Joined: May 22, 2008
Posts: 124
Helloooooooo

Still waiting for the response
Provide any suggestion , any help
Nathan Pruett
Bartender

Joined: Oct 18, 2000
Posts: 4121

You're passing the validator into the controller, but you're not telling it what to do with it.

Specifically, two parts you are missing are setting the validator in initBinder() and telling the form that you want to validate the User object by using the @Valid annotation in onSubmit().



P.S. - Patience is a virtue.


-Nate
Write once, run anywhere, because there's nowhere to hide! - /. A.C.
Abhra Kar
Ranch Hand

Joined: May 22, 2008
Posts: 124
Thanks a lot .
As you has written I have done this.TO compile the controller class properly I had to import

import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.WebDataBinder;
and
import javax.validation.Valid;
for validation.Valid i had to load one extra jar ---MAVEN2 http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/geronimo/specs/geronimo-validation_1.0_spec/1.0-CR5/
geronimo-validation_1.0_spec-1.0-CR5.jar


But still the problem persists.I think i will have to change the logic in --
@RequestMapping(method = RequestMethod.POST)
public String onSubmit(@Valid User user) {
return "result";
}


please give some suggestion

and to understand the proper flow in annotation based validation provide some links or book name
thanks again
Nathan Pruett
Bartender

Joined: Oct 18, 2000
Posts: 4121

Do you have <mvc:annotation-driven/> in your spring configuration? This is needed for the @Valid annotation to actually do anything.

The Spring Docs - Ch. 5.7 Validation is a good reference.
Abhra Kar
Ranch Hand

Joined: May 22, 2008
Posts: 124
No I didn't included <mvc:annotation-driven/>
But now i did that , but no effect .I am giving you the files ,please help me to find my mistake

dispatcher-servlet.xml ----
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">
<!-- Enable annotation driven controllers, validation etc... -->
<mvc:annotation-driven />
<context:component-scan base-package="controller" />
<bean id="userValidator" class="validator.UserValidator" />
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages"/>
</bean>
<bean id="viewResolver"
class=" org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
</beans>


bean class--
package model;
public class User{
private String firstName;
private String lastName;
public void setFirstName(String firstName){
this.firstName=firstName;
}
public String getFirstName(){
return firstName;
}
public void setLastName(String lastName){
this.lastName=lastName;
}
public String getLastName(){
return lastName;
}
}


Controller class---
package controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.SessionAttributes;
import javax.validation.Valid;
import validator.UserValidator;
import model.User;
@Controller
@RequestMapping("/userRegistration.htm")
public class UserController {
@Autowired
private UserValidator userValidator;
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(userValidator);
}
@RequestMapping(method = RequestMethod.GET)
public String showUserForm(ModelMap model)
{
User user = new User();
model.addAttribute(user);
return "index";
}
@RequestMapping(method = RequestMethod.POST)
public String onSubmit(@Valid User user) {
return "result";
}
}


validator class-----
package validator;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import model.User;
public class UserValidator implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return User.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "firstName.required","give proper value");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastName", "lastName.required","give proper value");
}
}


messages.properties in WEB-INF\classes ---
firstName.required = First Name is required
lastName.required = Last Name is required


jars set in classpath----
set classpath=.;D:\sjars\org.springframework.aop_3.0.5.RELEASE.jar;D:\sjars\org.springframework.asm_3.0.5.RELEASE.jar;D:\sjars\org.springframework.aspects_3.0.5.RELEASE.jar;D:\sjars\org.springframework.beans_3.0.5.RELEASE.jar;D:\sjars\org.springframework.context.support_3.0.5.RELEASE.jar;D:\sjars\org.springframework.context_3.0.5.RELEASE.jar;D:\sjars\org.springframework.core_3.0.5.RELEASE.jar;D:\sjars\org.springframework.expression_3.0.5.RELEASE.jar;D:\sjars\org.springframework.instrument.tomcat_3.0.5.RELEASE.jar;D:\sjars\org.springframework.instrument_3.0.5.RELEASE.jar;D:\sjars\org.springframework.jdbc_3.0.5.RELEASE.jar;D:\sjars\org.springframework.jms_3.0.5.RELEASE.jar;D:\sjars\org.springframework.orm_3.0.5.RELEASE.jar;D:\sjars\org.springframework.oxm_3.0.5.RELEASE.jar;D:\sjars\org.springframework.test_3.0.5.RELEASE.jar;D:\sjars\org.springframework.transaction_3.0.5.RELEASE.jar;D:\sjars\org.springframework.web.portlet_3.0.5.RELEASE.jar;D:\sjars\org.springframework.web.servlet_3.0.5.RELEASE.jar;D:\sjars\org.springframework.web.struts_3.0.5.RELEASE.jar;D:\sjars\org.springframework.web_3.0.5.RELEASE.jar;D:\sjars\commons-logging-api-1.1.1.jar;D:\sjars\servlet-api.jar;D:\sjars\jsp-api.jar





And link provide by you help a lot ,I have better idea now .
PLease help me here
THanks
Abhra Kar
Ranch Hand

Joined: May 22, 2008
Posts: 124
hi please provide any suggestion
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Validation is not working in Annotaion based controller