【发布时间】:2011-05-08 12:14:11
【问题描述】:
一个相当常见的用例发生在有 Java 对象列表的情况下,可以在 Web 表单上从中进行选择 - 通常您会使用对象的主键作为值,以便控制器可以执行查找,或者只是将键绑定到创建/更新的任何对象。
我的问题是要从中选择的列表不是持久的、键控对象,它们是来自服务的业务模型,没有合理的方法根据包含的数据检索它们。下面是一些伪代码,其中给页面提供了 Foo 的列表,我们可以很容易地与控制器通信 onSubmit 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。当然还有其他方法可以做到这一点。
我的问题是是否存在任何标准做法来实现这一点?还是我应该想出自己的方法?如果可能的话,我宁愿不重新发明轮子,这似乎很常见,以至于仅仅依靠它可能不是最好的方法。
【问题讨论】:
标签: java spring jsp spring-mvc