【问题标题】:How to provide a message of my choosing on form validation failure如何在表单验证失败时提供我选择的消息
【发布时间】:2012-01-04 05:36:52
【问题描述】:

我正在使用 spring mvc 3.0。这是我的控制器类:

    @Controller
@RequestMapping("/author")
public class AuthorController {
    @Autowired
    private IAuthorDao authorDao;

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        binder.registerCustomEditor(Date.class, new CustomDateEditor(
                dateFormat, true));
    }

    @RequestMapping(method = RequestMethod.GET)
    public String get(Model model) {
        return "author-list";
    }

    @RequestMapping(value = "/new", method = RequestMethod.GET)
    public String create(Model model) {
        model.addAttribute("author", new Author());
        return "author-form";
    }

    @RequestMapping(value = "/new", method = RequestMethod.POST)
    public String createPost(@ModelAttribute("author") Author author,
            BindingResult result) {
        new AuthorValidator().validate(author, result);
        if (result.hasErrors()) {
            return "author-form";
        } else {
            authorDao.persist(author);
            return "redirect:/author/" + author.getId();
        }
    }

    @RequestMapping(value = "/{authorId}", method = RequestMethod.GET)
    public String view(@PathVariable("authorId") int authorId) {
        return "author-view";
    }
}

我正在尝试验证作者对象。它具有类型为日期的 dob attr。

我正在使用以下类进行验证:

    public class AuthorValidator {
    public void validate(Author author, Errors errors) {

        if(author.getfName()==null)
            errors.rejectValue("fName", "required", "required");
        else if (!StringUtils.hasLength(author.getfName())) {
            errors.rejectValue("fName", "required", "required");
        }

        if(author.getfName()==null)
            errors.rejectValue("lName", "required", "required");
        else if (!StringUtils.hasLength(author.getlName())) {
            errors.rejectValue("lName", "required", "required");
        }

        if(author.getDob()==null)
            errors.rejectValue("dob", "required", "required");
        else if (!StringUtils.hasLength(author.getDob().toString())) {
            errors.rejectValue("dob", "required", "required");
        }
    }
}

当我没有在它提供所需消息的表单中输入任何内容时,它是正确的,但是当我提供不正确的格式时,它会将Failed to convert property value of type java.lang.String to required type java.util.Date for property dob; nested exception is java.lang.IllegalArgumentException: Could not parse date: Unparseable date: "asdads" required 作为消息写入。如何使它像“无效日期”。

谢谢。

【问题讨论】:

    标签: validation spring-mvc


    【解决方案1】:

    如果您使用标准 Spring 设施,您需要做的就是:

    添加消息来源:

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="com.example.messages" />
    </bean>
    

    添加属性文件com/example/messages.properties 包含以下之一:

    typeMismatch.author.date = Invalid date
    typeMismatch.date = Invalid date
    typeMismatch.java.util.Date = Invalid date
    typeMismatch = Invalid date
    

    首先允许您为特定命令对象 (author) 中的特定字段 (date) 配置错误消息,第二 - 任何命令对象中的 date 字段,第三 - 字段绑定错误的消息java.util.Date 类,最后一个 - 任何转换导致的错误的一般消息。

    这是我的 JSP 页面:

    <%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
    <%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
       <sf:form commandName="author">
          <sf:errors path="date"  /><br />
          <sf:input path="name"/><br />
          <sf:input path="date"/><br />
          <input type="submit" value="ok" />
       </sf:form>
    </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 2017-11-19
      • 2018-09-20
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      相关资源
      最近更新 更多