当数据最初从控制器层传入时,我发现很难从网页中检索数据。
我正在使用Thymeleaf 3和Spring boot v1。我有一个webMVC控制器,它正在将一个对象传递给模板。对象看起来像这样(伪代码):
public class Person{
// Nested object retrieved from various data sources
// and passed to the UI
private Address address;
private Job job;
// Form values I want to retrieve from UI
private String formValue1;
private String formValue2;
// getters/setters
}
我的html页面分为两个部分。一个部分显示大部分Person值,而另一个部分包括一个基本表单。提交表单时,我希望表单值加上所有原始值返回给服务器。
我发现Thymeleaf似乎只会检索表单中的值,这意味着我必须将表单扩展到页面的两个部分,即使用户只会填写页面的一个部分。所以现在html如下所示:
<html>
<!--header/body/etc -->
<form th:object="${person}" th:action="@{/person/id}" method="post">
<!-- Form Inputs -->
<input type="text" th:field="${person.formValue1}"/>
<input type="text" th:field="${person.formValue2}"/>
<!-- Values not used in form, but included so they will be sent back
to server -->
<input type="text" th:field="${person.address.city}" readonly="readonly"/>
<input type="text" th:field="${person.address.street}"
readonly="readonly"/>
<input type="text" th:field="${person.job.title}" readonly="readonly"/>
</form>
</html>
此外,Thymeleaf似乎只能检索具有属性th: field
的值,但th:field
只能分配给
所以我想知道是否有人可以帮助解决以下问题:
th: field
是我可以用来发回数据的唯一选项吗?(我已经成功地使用th:text
显示了数据,但是没有成功发回任何东西)。谢谢。
Thymeleaf是否可以返回不在表单内的值(但在表单提交时返回)
这更多的是关于超文本标记语言表单和HTTP中的POST是如何工作的。超文本标记语言表单将在其中发送整个数据,Thymeleaf将该数据绑定到控制器中的一个对象。所以如果你想要所有的值,你实际上应该把它全部包装在一个表单中——这是一个很好的方法。如果你不想显示所有的字段,你可以使用隐藏字段。
如果出于某种原因,您仍然希望将数据保持在单独的形式中,您可以尝试解决它:
不管怎样,我不会推荐这些。尽量保持简单。
th: field是我唯一可以用来发回数据的选项吗?(我已经成功地用th:text显示了数据,但是没有成功发回任何东西)
对于长文本,您可以使用text zone。