0

在 Spring MVC 中,我有以下控制器:

@RequestMapping(value="adminUsers", method = RequestMethod.POST) 
public ModelAndView listAdminUsers(Person newPerson,  HttpServletResponse response)  throws Exception {
Person person = personService.findPerson(newPerson.getUsername());
if (person == null) {
    // Set errorText = "Invalid Person";
    // redisplay view
    ModelAndView mav = new ModelAndView("adminUsersList");
    return mav;
} else {
    Roles roles = new Roles();
    roles.setPersonCode(person.getPersonCode());
    roles.setRoleType("ADMN");
    rolesMapper.insert(roles);
    return new ModelAndView("redirect:/admin/adminUsers.html");
} 
}

有观点:

    <form:form method="post" action="${action}" commandName="person" >
    <form:label path="username">Add new administrator:</form:label>
    <form:input path="username" size="20"/>
    <form:errors path="username" />
    <input type="submit" value="Submit Changes"/> </form:form>

我如何将错误返回给视图,以便由<form:errors path="username" />标签显示?

这类似于如何从这个 Spring MVC 控制器返回错误状态和验证错误?除了我返回的是一个网页,而不是一个 REST 对象,所以那里的答案不适用。

我不想使用Validator,因为上面调用了数据库,这不仅仅是检查用户名是否为空等。

谢谢!

4

3 回答 3

2

添加BindingResult到您的方法签名中。从那里,bindingResult.rejectValue("username", "username.notvalid", "Username is not valid");

于 2012-08-07T13:10:08.737 回答
0

BrandonV 拥有它。我的控制器现在看起来像:

  // Create a new item
@RequestMapping(value="adminUsers", method = RequestMethod.POST)
public ModelAndView listAdminUsers(Person newPerson,  BindingResult result, HttpServletResponse response)  throws Exception {
    Person person = personService.findPerson(newPerson.getUsername());
    if (person == null) {
        result.rejectValue("username","username.notvalid","Username doesn't exist");
        ModelAndView mav = new ModelAndView("adminUsersList");  //This is ugly, it's copy & pasted from above
        mav.addObject("adminUsersList", adminService.findAllAdminUsers()); //Ugly...
        return mav;
    } else {
        Roles roles = new Roles();
        roles.setPersonCode(person.getPersonCode());
        roles.setRoleType("ADMN");
        rolesMapper.insert(roles);
        return new ModelAndView("redirect:/admin/adminUsers.html");
    }
}
于 2012-08-07T14:53:47.090 回答
0

您需要更改方法逻辑:

if (result.hasErrors){ return ""; } else { 创建你的人对象逻辑就在这里!}

于 2015-03-11T10:14:01.473 回答