【问题标题】:Spring MVC validation in MultiActionControllerMultiActionController 中的 Spring MVC 验证
【发布时间】:2011-08-30 11:50:50
【问题描述】:

我已经使用 Spring MVC 4 个月了,但我仍然无法验证我的表单。这就是我想要做的:

在我的jsp中:

<form:form method="POST" action="ordertypeadd.htm" commandName="orderType">
ID Parent: <form:input path="id_parent"/><form:errors path="id_parent" /><br/>
Name: <form:input path="title"/> <form:errors path="title" /> <br/>
Description: <form:input path="description"/> <form:errors path="description" /><br/>
<input type="submit" value="Submit!" />

在我的控制器中(扩展 MultiActionController)

@RequestMapping(value="/ordertypeadd.htm", method=RequestMethod.POST)
    public ModelAndView ordertypeadd(HttpServletRequest request,
            HttpServletResponse response, OrderType orderType)throws Exception{
            orderTypeDAO.save(orderType);
            return new ModelAndView("redirect:ordertypelist.htm");
    }

在我的 spring-servlet.xml 中:

<bean name="/ordertypeadd.htm" class="pl.edm.orders.spring.OrderTypeController">
        <property name="orderTypeDAO" ref="myOrderTypeDAO" />
        <property name="validators">
        <list>
        <ref bean="myOrderTypeValidator"/>
        </list>
        </property>
    </bean>

当然我的“myOrderTypeValidator”是:

<bean id="myOrderTypeValidator" class="pl.edm.orders.spring.OrderTypeValidator">

还有我的 Validator 类(目前它只检查“标题”描述):

public class OrderTypeValidator implements Validator{

    public boolean supports(Class arg0) {
        return OrderType.class.equals(arg0);
    }

    public void validate(Object arg0, Errors arg1) {
        ValidationUtils.rejectIfEmpty(arg1, "title", "title");
    }

}

编译正常,一切正常,除了当我填写表格时,我得到了这个:

org.springframework.web.bind.ServletRequestBindingException:错误 绑定到对象“命令”;嵌套异常是 org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 个错误 字段“标题”上的对象“命令”中的字段错误:拒绝值 []; 代码 [title.command.title,title.title,title.java.lang.String,title]; 论据 [];默认消息 [null] org.springframework.web.bind.ServletRequestDataBinder.closeNoCatch(ServletRequestDataBinder.java:122) org.springframework.web.servlet.mvc.multiaction.MultiActionController.bind(MultiActionController.java:540) org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:468) org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:408) org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:585) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

根本原因

org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 个错误 字段“标题”上的对象“命令”中的字段错误:拒绝值 []; 代码 [title.command.title,title.title,title.java.lang.String,title]; 论据 [];默认消息 [null] org.springframework.web.bind.ServletRequestDataBinder.closeNoCatch(ServletRequestDataBinder.java:124) org.springframework.web.servlet.mvc.multiaction.MultiActionController.bind(MultiActionController.java:540) org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:468) org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:408) org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:585) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

【问题讨论】:

    标签: validation spring-mvc


    【解决方案1】:

    可能你已经修复了你的错误,但如果其他人有同样的错误,你可以尝试在模型类中添加一个构造函数..

    例子:

    public Class Person{
      private String id;
      private String name;
      public Person(String id){
         this.id=id;
      }
      //setter getter and default constructor here
    }
    

    我不确定它是否适用于你的,但它适用于我的项目。

    感谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-08
      • 2011-07-31
      • 2013-03-05
      • 2011-06-07
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多