弹簧 MVC - 下拉对象选择 - 无主要标识符
2022-09-03 07:48:38
一个相当常见的用例发生在有一个Java对象列表的情况下,可以从中在Web表单上进行选择 - 通常你会使用对象的主键作为值,以便控制器可以执行查找,或者只是将键绑定到创建/更新的任何对象。
我的问题是,可供选择的列表不是持久的键控对象,它们是来自服务的业务模型,没有合理的方法来根据包含的数据检索它们。下面是一些伪代码,其中Foo的列表被提供给页面,我们可以轻松地在提交Foo的名称上与控制器进行通信,但是如果需要提交Foo的其他字段怎么办?
控制器:
referenceData() {
...
List foos = fooService.getFoosForBar( bar )
return { 'foos', foos }
}
jsp:
<form>
...
<spring:bind path="formData.foo">
<select name="<c:out value="${status.expression}" />">
<c:forEach items="${foos}" var="foo">
<option value="<c:out value="${foo.name}"/>">
<c:out value="${foo.name}"/>
</option>
</c:forEach>
</select>
</spring:bind>
...
</form>
一些示例解决方案是使用隐藏字段来提交Foo的其他属性,并在选择更改时保持它们同步,但我宁愿不要在这样的情况下使用JavaScript,因为它可能会增加混乱。当然,还有其他方法可以实现这一目标。
我的问题是,是否有任何标准做法来实现这一目标?还是我应该想出自己的方式?如果可能的话,我宁愿不重新发明轮子,而且这似乎很常见,只是翅膀可能不是最好的方法。