在@ModelAttribute方法中访问时,@ RequestParam为null

时间:2011-05-31 23:55:44

标签: java spring-mvc modelattribute

我正在使用的是一个项目,用户可以选择以新的表单提交开始,或者继续之前已经开始的表单提交。我正在使用@ModelAttribute表示法为新表单提交生成新对象。这很有用。现在,我正在尝试从数据库中获取信息,以根据给定的ID预先填充对象中的信息,我遇到了麻烦。我正在尝试使用@RequestParam获取使用表单提交传入的id,但id返回null。我可以看到id是作为请求字符串的一部分发送的,但它没有进入@ModelAttribute方法。这是我到目前为止所拥有的。

提交发送regId的表单,以便可以预先填充表单

<form id="preregistration" action="/Homepage/Pre-Registration" method="post">
<input type="text" name="view" id="view" value="preprocess"/>
<select name="regId" id="regId">
    <option value="0">Select</option>
    <option value="1234">1234</option>
    <option value="4567">4567</option>
</select>
<input type="submit" name="submit" id="submit" value="Submit"/>
</form>    

模型属性方法

@ModelAttribute("event")
public Event createDefaultEvent(@RequestParam(required = false) Integer regId){
    log.debug("regId: {}", regId);
    if (regId == null){
        log.debug("make new event object");
        return new Event();
    } else {
        log.debug("retrieve event with id: {}", regId);
        return eventDao.get(regId);
    }
}    

请求映射方法

@RequestMapping(params = "view=preprocess")
public String getPreProcessInformation(@ModelAttribute("event") Event event)
    throws Exception{
        return "redirect:/preregistration.do?"+Page.EVENT.getView();
}

当我提交表单时,有人可以帮我弄清楚为什么我的regId在@ModelAttruibute方法中为空?提前谢谢!

1 个答案:

答案 0 :(得分:3)

您需要告诉它您要阅读的参数的名称是:

@RequestParam(value="regId", required = false)

方法参数的名称不是通过运行时的反射可用的。 Spring无法弄清楚你在java代码中命名了你的参数'regId',你需要告诉它。

编辑:

另外一些学术漫无边际的ModelAttribute方法最适合用于提供在您正在构建的View范围内修复的参考数据。您计划将表单字段绑定到的事务项通常应由实际的请求处理程序方法生成。如果您使用OpenSession / EntityManagerInView过滤器和/或@SessionAttributes注释,这将变得特别重要。