Как предоставить сообщение о моем выборе в случае ошибки при проверке формы - PullRequest
3 голосов
/ 04 января 2012

Я использую 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, который является типом Date.

Я использую следующий класс для проверки:

    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 как сообщение.как сделать это как "Неверная дата".

спасибо.

1 Ответ

5 голосов
/ 04 января 2012

Если вы используете стандартные средства Spring, все, что вам нужно сделать, это:

Добавить messageSource:

<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

сначала позволяет настроить сообщение об ошибке для определенного поля (date) в конкретном объекте команды (author), второе - поле 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...