2013-05-21 46 views
0

我认为这个问题很常见,但由于某种原因,我无法解决这个问题。Spring Validator不支持命令类

这是我收到的错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'reverseController' defined in ServletContext resource [/WEB-INF/app-servlet.xml]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: Validator [[email protected]] does not support command class [ReverseString] 

这是支持方法在我FormValidator类:

public boolean supports(Class clazz) { 
    return ReverseController.class.isAssignableFrom(clazz); 
} 

这是我的应用程序-servlet.xml中的bean定义:

<bean id="reverseController" class="ReverseController">  
    <property name="commandName"><value>reverseString</value></property> 
    <property name="commandClass"><value>ReverseString</value></property>   
    <property name="formView"><value>reverse</value></property> 
    <property name="successView"><value>reverseResult</value></property> 
    <property name="validator"><bean class="FormValidator" /></property> 

最后,这是我ReverseController的主要部分:

@Service 
public class ReverseController extends SimpleFormController { 

    public ReverseController() { 
     //setCommandClass(ReverseString.class); 
     //setCommandName("reverseString"); 
    } 

    private ReverseString reverseStringMaster; 

    @Autowired 
    public void setWriter(ReverseString reverseStringMaster) { 
     this.reverseStringMaster = reverseStringMaster; 
    } 

    protected ModelAndView onSubmit(HttpServletRequest request, 
     HttpServletResponse response, Object command, BindException errors) { 

     ReverseString revString = (ReverseString) command; 

     return new ModelAndView(getSuccessView(),"reversedString", revString); 
    } 

    public void init() { 
     System.out.println("Done"); 
    } 


} 

任何想法什么可能导致这个问题?

回答

3

这是一个命令类的实例,它在每个请求上得到验证 - 因为它会用表单数据填充。控制器本身未经验证。

所以supports()方法在FormValidator实际上应:

public boolean supports(Class clazz) { 
    return ReverseString.class.isAssignableFrom(clazz); 
} 
0

您是否为此commandClass变量添加了获取者和设置者
如果是这样,您可能需要从setter方法方法中删除@spring.validator type="required"

0

试试这个代码为你的应用程序servlet.xml
1.定义你的控制器是这样的。
2.然后使用reverseController调用ReverseController类的方法。

<managed-bean> 
     <managed-bean-name>reverseController</managed-bean-name> 
     <managed-bean-class>com.action.ReverseController</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean>