Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring中的可编辑表_Spring Boot_Spring Mvc_Thymeleaf - Fatal编程技术网

Spring boot Spring中的可编辑表

Spring boot Spring中的可编辑表,spring-boot,spring-mvc,thymeleaf,Spring Boot,Spring Mvc,Thymeleaf,作为一名后端程序员,我很少处理web方面的事情。因此,至少可以说,我对框架的总体理解,特别是对Thymeleaf的理解相对简单化了。但现在我需要创建一个基本的,但希望仍然是体面的网站来维护一个数据库。这是一个非常小的模式,仅由内部用户更新。因此,它不必面向客户,也不必对所有攻击者进行打磨或加固。我的程序员仍然希望它不仅仅是垃圾 我认为最好是一个表示数据库行的html表——DUH。但是我希望整个表都是可编辑的,而不是让我编写代码,然后用户单击各个行进行编辑 很久以前,我用JQuery做了类似的事情

作为一名后端程序员,我很少处理web方面的事情。因此,至少可以说,我对框架的总体理解,特别是对Thymeleaf的理解相对简单化了。但现在我需要创建一个基本的,但希望仍然是体面的网站来维护一个数据库。这是一个非常小的模式,仅由内部用户更新。因此,它不必面向客户,也不必对所有攻击者进行打磨或加固。我的程序员仍然希望它不仅仅是垃圾

我认为最好是一个表示数据库行的html表——DUH。但是我希望整个表都是可编辑的,而不是让我编写代码,然后用户单击各个行进行编辑

很久以前,我用JQuery做了类似的事情。我还记得JQuery最适合那些知道自己在做什么的人。因此,我试图以较少的复杂性来实现这一点。我希望仍然使用Thymeleaf,至少让事情变得有趣一点

这就是我的知识搁浅的地方。我不知道如何访问数据

由于对表的大小进行一些限制似乎是个好主意,因此我的SpringMVC控制器返回一个包含检索到的模型对象的页面对象。因此,我的回答如下:

厚颜无耻地复制示例在表格中显示模型是微不足道的

  <tr th:each="restProvider : ${providerPage.content}">
  <td th:text="${restProvider.enabled}" />
我试过其他一些方法。包括搞乱迭代器的指定方式。但他们中没有一个能摆脱多余的“.”

编辑2


添加了表单信息

这里的问题是表达式*{restProvider.enabled}试图解析为
providerPage.restProvider.enabled
,这当然不是真实的。使用字段表达式时,不能使用由
th:each
th:with
创建的临时变量。您已经构建了一个解析为表单
th:object
的完整表达式。试试这个:

<tr th:each="restProvider, i : ${providerPage.content}">
    <td>
        <input type="text" th:field="*{content[__${i.index}__].enabled}"  />


这将解析为一个表达式,如
providerPage.content[0]。enabled

这里的问题是表达式
*{restProvider.enabled}
正在尝试解析为
providerPage.restProvider.enabled
,这当然不是一个真实的表达式。使用字段表达式时,不能使用由
th:each
th:with
创建的临时变量。您已经构建了一个解析为表单
th:object
的完整表达式。试试这个:

<tr th:each="restProvider, i : ${providerPage.content}">
    <td>
        <input type="text" th:field="*{content[__${i.index}__].enabled}"  />


这将解析为类似于
providerPage.content[0]的表达式。已启用

非常感谢!这让我走得更远。但不完全是这样。根据我的更新有什么想法吗?真的没什么可看的了。我添加了表单的其余部分,只保留了列标题。以及所有其他尚未转换为输入的字段。但这确实是全部。您有
th:object=“${providerPage.content}”
——这不是一个有效的对象。根据文档:
表单标记中th:object属性的值必须是变量表达式(${…}),只指定模型属性的名称,而不进行属性导航。
必须使用
th:object=“${providerPage}”
就像您在开始时使用的那样,
th:field=“*{content[\uu${i.index}}].enabled}”
作为字段。抱歉。这现在开始有意义了。谢谢非常感谢!这让我走得更远。但不完全是这样。根据我的更新有什么想法吗?真的没什么可看的了。我添加了表单的其余部分,只保留了列标题。以及所有其他尚未转换为输入的字段。但这确实是全部。您有
th:object=“${providerPage.content}”
——这不是一个有效的对象。根据文档:
表单标记中th:object属性的值必须是变量表达式(${…}),只指定模型属性的名称,而不进行属性导航。
必须使用
th:object=“${providerPage}”
就像您在开始时使用的那样,
th:field=“*{content[\uu${i.index}}].enabled}”
作为字段。抱歉。这现在开始有意义了。谢谢
Bean property 'content.[0]' is not readable or has an invalid getter method
<tr th:each="restProvider, i : ${providerPage.content}">
    <td>
        <input type="text" th:field="*{content[__${i.index}__].enabled}"  />