![](/img/trans.png)
[英]Populate the default values of an input tag from a list of objects in Thymeleaf
[英]Dynamic binding from input (Thymeleaf) field to list of values parameter
我试图让我的头脑进入 Thymeleaf 和一些仍然很简单的形式,但我无法让它工作......
我有一个业务对象,它存储一些按枚举分类的值(内部实现不在此问题的范围内):
public class MyBusObj {
public static enum MY_TYPE {A, B, C };
public int getValue( MY_TYPE type ) { ... }
public void setValue( MY_TYPE type, int value ) { ... }
}
当我将该对象的实例传递给我的模型时,例如 'model.addAttribute("myBusObj", new MyBusObj());' 它到达模板级别,我可以像这样访问所有内部可用的值(showTypes 基本上是 MY_TYPE 或其子集作为数组):
<td th:each="type : ${showTypes}">
<input type="number" th:value="${myBusObj.getValue( type )}" th:field="${myBusObj.setValue( type )}"/>
</td>
它显示一行编辑框,每个值一个。 这就是我想要实现的,它是动态的,因为如果我添加更多类型,则会自动显示一个新的“D”类型框,这很完美。
虽然来自业务对象的方向 -> 视图完美地工作,因为 'getValue( type )' 会产生正确的值,但部分 'th:field="${myBusObj.setValue( type )}"' 显然不能正常工作类似于'(type, value)',但我也不能写'myBusObj.value(type)'。
谁能想到如何将用户输入写回业务对象的解决方案? 否则我必须想到一个“拐杖”,比如重组我的业务对象。
提前致谢,斯蒂芬
如果我理解正确,您正在尝试找到一种使用 Thymeleaf 处理枚举的方法。 访问枚举值的正确语法(例如在下拉列表中),您需要像这样使用它:
<option th:each="myitem : ${T(your.package.YourEnum).values()}"
th:value="${myitem.name()}" th:text="${myitem.name()}"></option>
同样,您可以在 for-each for <td>
如下所示:
<td th:each="type : ${T(your.package.YourEnum).values()}">
......
</td>
更新:
知道了。 在这种情况下,您必须使用 Thymeleaf 提供的 rowStat 来跟踪迭代。
但是请确保您的 bean 中有该字段作为集合类型“AND”应该具有与您的枚举对象匹配的大小。
然后您可以执行以下操作:
<td> <select th:name="${yourbeanobj.beanFieldCollection[__${rowStat.index}__].beanFiled}" th:field="${yourbeanobj.beanFieldCollection[__${rowStat.index}__].beanFiled}" th:errorclass="is-invalid" multi>
<option value="abc">Iterate Your Enum List Here</option>
</select>
</td>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.