【问题标题】:Thymeleaf labels not returning values to serverThymeleaf 标签不向服务器返回值
【发布时间】:2018-03-25 03:00:51
【问题描述】:

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

我正在使用 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 只能分配给&lt;input/&gt; 元素(据我所知),所以我拥有的任何长文本都会被截断输入字段的正常长度,这是相当有限的。

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

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

谢谢。

【问题讨论】:

  • 只是为了确定,有两种形式的问题,是关于你的对象没有被所有值填充的问题吗?
  • 只有一个表单,但它包含表单不需要的值。它们被包含在内,因此它们将被发送回服务器。我已经更新了 html 示例

标签: html spring forms spring-boot thymeleaf


【解决方案1】:

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

这里更多的是关于 HTML 表单和 HTTP 中的 POST 是如何工作的。 HTML 表单将在其中发送整个数据,Thymeleaf 会将这些数据绑定到控制器中的对象。因此,如果您想要所有值,实际上应该将它们全部包装在一个形式中 - 这是一个很好的方法。如果您不想显示所有可以使用隐藏字段的字段。

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

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

无论如何,我不会推荐任何这些。尽量保持简单。

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

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

【讨论】:

    猜你喜欢
    • 2015-11-22
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多