gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:41:46 26 4
gpt4 key购买 nike

我正在开发一个项目,用户可以选择从新的表单提交开始,或继续他们之前开始的表单提交。我使用 @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 方法中为空吗?提前致谢!

最佳答案

您需要告诉它您要读取的参数名称是什么:

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

方法参数的名称不能在运行时通过反射获得。 Spring 无法识别出您在 java 代码中将参数命名为“regId”,您需要这样告诉它。

编辑:

还有一些更学术的废话,ModelAttribute 方法最适合用于提供固定在您正在构建的 View 范围内的引用数据。您计划将表单字段绑定(bind)到的事务项通常应由实际的请求处理程序方法生成。如果您使用 OpenSession/EntityManagerInView 过滤器和/或 @SessionAttributes 注释,这一点变得尤为重要。

关于java - 在@ModelAttribute方法中访问时@RequestParam为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6194856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com