首页 文章

Thymeleaf标签不向服务器返回值

提问于
浏览
0

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

我正在使用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 回答

  • 0

    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 .

相关问题