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:fieldth: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 形式 - 如何将模型属性的值从一个控制器方法传递到另一个控制器方法

thymeleaf在项目中的使用

thymeleaf在项目中的使用

spring thymeleaf - 从 html 表中删除对象并将 id 传递给控制器

无法解析来自thymeleaf的javascript中的JSON对象

ASP.NET MVC 向 JS 发送类对象的问题 - JS 数组中的空对象