繁体   English   中英

从输入 (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM