thymeleaf 形式的控制器中的空对象
Posted
技术标签:
【中文标题】thymeleaf 形式的控制器中的空对象【英文标题】:empty object in controller from thymeleaf form 【发布时间】:2016-05-13 03:15:05 【问题描述】:我有一张使用 thymeleaf 模板显示 testResults 的表格 -
<tr th:each="testResult,iterationStatus : $testResults">
<td th:text="$iterationStatus.count">1</td>
<td th:text="$testResult.name">DOMAIN</td>
<td th:text="$testResult.length">PROCESS</td>
<td>
<form ACTION="#" th:action="@/deleteName" th:object="$testResult" method="POST">
<input type="hidden" th:field="*name"/>
<input type="hidden" th:field="*length"/>
<button type="submit">submit</button>
</form>
</td>
</tr>
名称和长度在 html 中显示良好,但是当我提交表单时,控制器将名称和长度作为空值。 我在分配值时做错了什么......
下面是被调用的控制器方法 -
@RequestMapping(method= RequestMethod.POST, value = "/deleteName")
public String deleteName(@Valid @ModelAttribute("testResult") TestResult testResult, BindingResult bindingResult, Model model, HttpServletRequest request)
System.out.println(testResult.toString());
return "/";
提交表单后输出 - 测试结果 [name=, length=, xyz=null]
【问题讨论】:
请贴出控制器代码。至少,发布控制器方法声明和注释。 添加了控制器详细信息,谢谢。 【参考方案1】:我无法让th:field
在th:object
中工作,就像你在这里所做的那样。但是,如果我停止使用th:field
,而改用th:value
,则表单提交成功。
<tr th:each="testResult : $testResults">
<td th:text="$testResult.name">DOMAIN</td>
<td th:text="$testResult.length">PROCESS</td>
<td>
<form ACTION="#" th:action="@/deleteName" method="POST">
<input type="hidden" name="name" th:value="$testResult.name"/>
<input type="hidden" name="length" th:value="$testResult.length"/>
<button type="submit">submit</button>
</form>
</td>
</tr>
【讨论】:
虽然让我对使用百里香模板持怀疑态度,但它确实有效。谢谢 @chappalprasad:今天晚些时候我会花几分钟时间深入研究为什么它不能与 th:field 一起使用。我想尽快给你一个修复,以防你的问题阻碍你完成工作。 我花了更多时间查看 thymeleaf 代码。似乎 th:field 代码的绑定方式与 th:value 不同。 th:field 要求您正在使用的 th:object 直接在模型上。在您的情况下,“testResult”仅在您的 th:each 范围内。我不确定为什么它们的工作方式不同,但这就是为什么它在这里不适合你。 感谢您进一步调查。 th:value 满足了我的需求,所以我很好。以上是关于thymeleaf 形式的控制器中的空对象的主要内容,如果未能解决你的问题,请参考以下文章
Thymeleaf 形式 - 如何将模型属性的值从一个控制器方法传递到另一个控制器方法
spring thymeleaf - 从 html 表中删除对象并将 id 传递给控制器