我发现当数据最初从控制器层传入时,很难从网页中检索数据 .
我正在使用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只能分配给 <input/>
元素(据我所知),所以我所拥有的任何长文本都被截断为正常长度输入字段,相当有限 .
所以我想知道是否有人可以帮助解决以下问题:
-
Thymeleaf可以返回不在表单内的值(但在提交表单时返回)
-
是:字段是我可以用来发送数据的唯一选项吗? (我用th:text成功地显示了数据,但没有回复的运气) .
谢谢 .
1 回答
Can Thymeleaf return values which are not within a form (but returned when the form is submitted)
这更多是关于HTTP表单和HTTP中的POST如何工作 . HTML表单将在其中发送整个数据,Thymeleaf将该数据绑定到控制器中的对象 . 因此,如果你想要所有的值,你应该将它们全部包装在一个表单中 - 这是一个很好的方法 . 如果情况是您不想显示所有字段,则可以使用隐藏字段 .
如果由于某种原因仍然希望将数据保存在单独的表单中,您可以尝试解决它:
使用JavaScript从两个表单中收集数据并发送它
尝试将两个表单命名为相同 . 我不确定,但它可能会奏效
无论如何,我不会推荐任何这些 . 尽量保持简单 .
Is th:field the only option I can use for sending data back? (I've successfully displayed data with th:text, but no luck sending anything back)
对于长文本,您可以使用textarea .