2012-08-07 72 views
0

在Spring MVC,我有以下控制器:返回从控制器回错误以查看在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" />标签显示?

这是类似于How to return error status and validation errors from this Spring MVC controller?除了我返回一个网页,而不是一个REST对象,所以那里的答案不适用。

我不想使用Validator由于上述调用数据库,它不是简单的,如果用户名不是空等

由于支票!

回答

2

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

+0

抛出:'org.springframework.context.NoSuchMessageException:在代码'无效username.person.username'中找不到任何消息。 我的方法是现:'公共的ModelAndView listAdminUsers(人newPerson,BindingResult结果,HttpServletResponse的响应)抛出Exception' 以及拒收线是 'result.rejectValue( “用户名”, “无效的用户名”);' – Mark 2012-08-07 14:41:29

+0

抱歉忽略评论,解决了 – Mark 2012-08-07 14:52:42

+0

对于rejectValue的不正确签名感到抱歉。很高兴听到你解决了它。我已经更新了我的答案。 :) – bvulaj 2012-08-07 15:11:41

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"); 
    } 
} 
0

你需要改变你的方法的逻辑:

如果(result.hasErrors){ 回报 “”; }其他{ 创建你的人物对象逻辑就在这里! }