Spring POST提交两个字段返回三个字段时numbah空值问题求解
问题根因
- 你的
Greeting实体类不符合JavaBean规范:Spring MVC的@ModelAttribute数据绑定逻辑只会识别符合规范的setter方法(参数类型和属性类型一致的有参setter),你当前的setNumbah()是无参方法,不会被Spring自动调用。 - 表单没有提交
numbah字段时,Spring只会对表单提交的id、content两个字段执行绑定,调用对应的setter,不会主动触发numbah的计算逻辑,所以该字段返回null。 - 额外注意两处代码语法错误:
setContent方法漏了赋值语句,Controller的两个请求处理方法都没有返回视图名称,运行时会报错。
解决方法(两种方案二选一即可)
方案1:在Model层自动计算(更推荐,符合封装原则)
直接把numbah的计算逻辑和content的赋值逻辑绑定,只要content被Spring赋值,就自动计算numbah,无需修改Controller和视图代码。
修改后的Greeting类代码:
public class Greeting { //fields correspond to greeting.html private long id; private String content; private String numbah; public String getNumbah() { return numbah; } // 不需要外部调用的话可以设为private private void calculateNumbah() { this.numbah = SomeFunctions.functionOne(this.getContent()); } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content; // content赋值完成后自动计算numbah calculateNumbah(); } }
方案2:在Controller层手动触发计算
在Controller拿到绑定完成的Greeting对象后,手动调用计算逻辑:
@Slf4j @Controller public class GreetController { @GetMapping("/greeting") public String greetingForm(Model model) { model.addAttribute("greeting", new Greeting()); // 补全返回的视图名 return "greeting"; } @PostMapping("/greeting") public String greetingSubmit(@ModelAttribute Greeting greeting, Model model) { // 手动触发numbah计算 greeting.setNumbah(); model.addAttribute("greeting", greeting); // 补全返回的视图名 return "greeting"; } }
两种方案都不需要在表单里加numbah对应的输入框,即可实现提交id和content后自动计算返回三个字段的效果。
内容的提问来源于stack exchange,提问作者user15867360
相关产品推荐
相关产品推荐

