一個相當常見的用例出現在有一個Java對象列表,可以從Web表單上進行選擇 - 通常您可以使用主鍵對象作爲值,以便控制器可以執行查找,或者僅將鍵綁定到創建/更新的任何對象。Spring MVC - 下拉對象選擇 - 沒有主標識符
我的問題是,可供選擇的列表不是持久的,鍵控對象,它們是來自服務的業務模型,它們沒有合理的方式根據所包含的數據檢索它們。下面是一些僞代碼,其中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,這可能會增加混淆。當然還有其他方法可以實現這一點。
我的問題是否存在完成此任務的任何標準操作?或者我應該想出我自己的方式?如果可能的話,我寧願不重新發明輪子,這看起來很普遍,只是說它可能不是最好的方法。
我已經使用這種方法,在控制器中註冊一個自定義綁定器,從字符串轉到代表對象dwb建議的代碼)。 – Nate 2010-11-11 21:19:54