2014-10-10 123 views
0

我有要求将commandbean或form bean对象从ModelMap或HttpServletRequest或其他任何地方使用@ModelAttribute在Spring中使用@ModelAttribute获取CommandBean或表单bean对象mvc

我的代码是:

JSP:

<form:form commandName="user" method="POST" 
      action="${pageContext.request.contextPath}/user/createUser"> 
     Name:<form:input path="name" /> 
     Password:<form:input path="password" /> 

     <input type="submit"/> 

    </form:form> 

控制器:

@Controller 
@RequestMapping("/user") 
public class UserController { 

@RequestMapping(method = RequestMethod.GET) 
public String setupForm(ModelMap model) { 
    modelMap.addAttribute("user", new User()); 
    return "userRegistration"; 
} 

@RequestMapping(value = "/createUser", method = RequestMethod.POST) 
public String createUser(ModelMap model,HttpServletRequest request) { 
    User user=(User)model.get("user");// Retruns null 
    //Tried using request object but user object is not available in it. 
    return "message"; 
} 
} 

我尝试不同的方法,但没有解决。

+1

为什么你不能用'@ ModelAttribute',因为这是标注整点。 – 2014-10-10 11:00:34

回答

1

您可以实施HandlerMethodArgumentResolver手动创建该bean,然后(例如)使用WebMvcConfigurerAdapter来声明它。参数解析器supportsParameter方法应该检查参数的预期类型。之后,您可以在控制器中添加一个所需类型的参数。

+0

谢谢Jakub,我在创建用户bean之前曾尝试过这个问题,因为我无法从请求参数中获取它,它必须是通用的,即它应该适用于任何bean,并且请求参数对于每个模型都不相同。你有没有任何关于spring实际如何构建模型Attribute对象以及如何访问该对象的知识。 – user1188867 2014-10-11 04:26:57

+0

对不起,延迟很长。您可以尝试使用反射来将请求参数与bean属性匹配......但这只是重写@ModelAttribute功能。 – Apokralipsa 2014-10-21 10:48:49

+0

谢谢你的回复。我已经做到了。 – user1188867 2014-10-27 15:23:10

0

你可以手工做喜欢你,如果你不知道春天的魔力会做:只是在HttpServletRequest,并得到其参数养活你User。它可能看起来像:

@RequestMapping(value = "/createUser", method = RequestMethod.POST) 
public String createUser(ModelMap model,HttpServletRequest request) { 
    User user= new User(); 
    String name = request.getParameter("name"); 
    String password = request.getParameter("password"); 
    if (name != null) { 
     user.setName(name); 
    } 
    if (password!= null) { 
     user.setPassword(password); 
    } 
    model.addAttribute("user", user); 
    //Tried using request object but user object is not available in it. 
    return "message"; 
} 

或者更简洁的方式:user.setName(request.getParameter("name");

相关问题