经过15个小时的审判和恐怖,我决定与世界分享我的问题,因为坦率地说,我不知道如何解决我的问题了:
我已经为用户创建了一个自定义表单来检查复选框并按下保存按钮: 这是相关代码的片段:
<form th:action="@{/profile}" action="/profile" th:object="${profileModel}" method="POST">
<div class="row" style="margin-left: 5px;"><h4>Select</h4></div>
<div class="row">
<!-- Barbell -->
<section class="panel panel-default panel-equipment col-md-3">
<header class="panel-heading panel-heading-profileform">
<h3 class="panel-title"><b>Barbell</b></h3>
</header>
<div class="col-md-12">
<div><input type="checkbox" th:field="*{equipment.barbellLight}" th:value="1"> Light</input></div>
<div><input type="checkbox" th:field="*{equipment.barbellMedium}" th:value="1"> Medium</input></div>
<div><input type="checkbox" th:field="*{equipment.barbellHeavy}" th:value="1"> Heavy</input></div>
</div>
</section>
</div>
</div>
</form>
我的控制器: 请求:
@RequestMapping(value = "/profilestage", method=RequestMethod.POST)
public String updateProfileStage(@ModelAttribute ProfileModel profileModel, Model model){
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
model.addAttribute("signedin", true);
model.addAttribute("username", username.substring(0, 1).toUpperCase() + username.substring(1));
UserEntity user = userService.findByUsername(username);
ProfileEntity profile = user.getProfile();
model.addAttribute("profileModel", ModelEntityConvertor.profileEntityToModel(profile));
return "profile_new";
}
这不是所有的控制器,但就您需要知道的而言,我已经彻底调试了所有这些代码并且profileModel进入,th:object
中使用的那个,永远不会为null,并且始终设置所有必填字段(在我的情况下全部为0&#39;)。
表单正在发布到此控制器:
@RequestMapping(value = "/profile", method=RequestMethod.POST)
public String updateProfile(@ModelAttribute ProfileModel profileModel, Model model){
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
UserEntity user = userService.findByUsername(username);
ProfileEntity profile = user.getProfile();
profile.setEquipment(ModelEntityConvertor.equipmentModelToEntity(profileModel.getEquipment(), profile.getEquipment()));
profileService.updateProfile(profile);
return this.getProfile(model);
}
每当我的应用程序决定不工作时,永远不会到达此控制器,但无论何时到达,它都像魅力一样工作,并且完全按照预期工作。
我试图解决的一个大问题是,所有这些偶尔都有效。一分钟我运行代码,没问题。然后我重新运行完全相同的代码,尝试与其他用户或两者一起执行此操作,并在单击save
弹出的默认错误页面后显示。
在任何地方都没有提供错误消息......
我试过了:
老实说,我不明白我做错了什么,真的很感谢你的帮助=)
Thnx提前阅读我的文本墙并为后者道歉。 如果我的代码需要更多,我在这里不停。
答案 0 :(得分:2)
1)将第一个控制器块中的method=RequestMethod.POST
更改为method=RequestMethod.GET
。
Further background on GET vs POST(OP不需要,但未来读者需要)
2)在记录器中将此设置为DEBUG:org.springframework.web
和org.spring.web.context
也可以进一步了解哪些页面被调用。
3)在方法签名中添加BindingResult
,将基元默认为零。 (参见评论中OP的注释。)