我想将一个对象发送到视图以进行展示,并使用springboot和Thymeleaf将其发送回控制器,但是,我遇到了Thymeleaf的th:value怪异的问题。
这是我的控制者:
@GetMapping("/food/buy/{fid}")
public String buyFood(HttpServletRequest request, @PathVariable("fid") Long fid, Model model) {
Food food = consumerService.getFood(fid);
System.out.println("foodid = " + food.getId());
model.addAttribute("food", food);
model.addAttribute("order", new OrderVO());
return "user/direct/f_order";
}
和我的观点:
<form th:action="@{/user/buy/direct/food}" method="post" th:object="${order}">
<table border="1px">
<tr th:hidden="true">
<td><input type="text" th:value="${food.id}" th:field="*{fid}" th:readonly="true"></td>
</tr>
</table>
</form>
和VO类:
public class OrderVO {
private Long fid, address;
private Integer amount;
@DateTimeFormat(pattern = "HH:mm")
private Date deliverTime;
}
问题是,输入字段的值为null,但我确定食物的id不为null(我在控制器中将其打印出来)
我删除了th:field块,并且food.id可以正确显示。如果我重新添加th:field块,则会再次出现该问题。
所以th:field可能有问题,但我不知道。有人可以指出我的错误吗?
===========================更新=================== =========
一些朋友友善地指出th:field可能会覆盖th:value,但我也将其用在其他视图中,效果很好:
<tr>
<td>UserName</td>
<td><input type="text" th:value="*{userName}" th:field="*{userName}"></td>
</tr>
问题正在变得越来越怪异:(
答案 0 :(得分:0)
用fid替换* {fid} 我的团队也遇到了同样的问题,并且有效
答案 1 :(得分:0)
以表格形式尝试使用th:name
而不是th:field
来解决绑定问题
th:name="|order.fid|"
并遵循Java命名约定。
答案 2 :(得分:0)
假设您必须收集对页面的评论。除注释外,您还必须将页面名称发送给控制器。当然,用户不必重新输入此页面的名称。该信息必须传递给控制器,但是th:field仅映射用户输入的值,而不映射默认情况下生成的值。
但是您可以将此页面的名称作为URL中的参数传送给控制器。
在html中,您有类似的内容:
<form th:action="@{/saveComment(lastPage=${lastPage})}" th:object="${comments}" method="post" enctype="multipart/form-data">
<div class="row">
.................................................................................
<h2>Enter your comment</h2>
<textarea th:field="${comments.comment}" rows="10" cols="100" name="comment" id="comment"></textarea>
<label for="comment">Your comment here</label><br />
<input type="submit" name ="submit" value="Submit" />
</div>
</form>
In controller, you put stuff like this:
@PostMapping("/saveComment")
public String saveComment(Comments comments, String lastPage) {
comments.setPage_commented(lastPage);
commentsRepository.save(comments);
return "redirect:/";
}
对我来说很好。