提问者:小点点

Thymeleaf标签不向服务器返回值


当数据最初从控制器层传入时,我发现很难从网页中检索数据。

我正在使用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只能分配给

所以我想知道是否有人可以帮助解决以下问题:

  1. Thymeleaf是否可以返回不在表单内的值(但在提交表单时返回)
  2. th: field是我可以用来发回数据的唯一选项吗?(我已经成功地使用th:text显示了数据,但是没有成功发回任何东西)。

谢谢。


共1个答案

匿名用户

Thymeleaf是否可以返回不在表单内的值(但在表单提交时返回)

这更多的是关于超文本标记语言表单和HTTP中的POST是如何工作的。超文本标记语言表单将在其中发送整个数据,Thymeleaf将该数据绑定到控制器中的一个对象。所以如果你想要所有的值,你实际上应该把它全部包装在一个表单中——这是一个很好的方法。如果你不想显示所有的字段,你可以使用隐藏字段。

如果出于某种原因,您仍然希望将数据保持在单独的形式中,您可以尝试解决它:

  • 通过使用JavaScript从两个表单中收集数据并发送它
  • 尝试将两种形式命名相同。我不确定,但它可能有效

不管怎样,我不会推荐这些。尽量保持简单。

th: field是我唯一可以用来发回数据的选项吗?(我已经成功地用th:text显示了数据,但是没有成功发回任何东西)

对于长文本,您可以使用text zone。