Web nesnesinde seçimlerin yapılabildiği bir Java nesnesi listesi olduğunda, genellikle yaygın bir kullanım durumu oluşur; kontrolörün bir arama yapabilmesi veya sadece nesnenin oluşturulduğu/güncellenmesi için anahtarı bağlayabilmesi için değer olarak nesne.Spring MVC - Drop Down Nesne Seçimi - Hiçbirincil tanımlayıcı yok
Sorunum, seçim yapılacak listenin kalıcı, anahtarlanmış nesneler olmaması, içerdiği veriler temelinde bunları almak için makul bir yolu olmayan bir hizmetten iş modelleri olmasıdır. Aşağıda, Foo'nun bir listesini sayfaya verdiğimiz bazı psuedo kodları yer alıyor ve kontrolöre kolayca iletişim kurabiliyoruz. Foo'nun ismini gönderin, ama ne yapması gerekiyorsa Foo'nun başka alanları varsa ne olacak?
kontrolör:
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>
Bazı örnek çözümleri Foo diğer özelliklerindeki göndermek ve seçim olarak senkronize halde tutmak için gizli alanları kullanmak olacaktır değiştirilir, ama ben tercih JavaScript'i böyle bir durumda kullanmamak için muhtemelen karışıklık katacak. Bunu gerçekleştirmenin başka yolları da var.
Sorum, bunun için standart bir uygulama var mı? Yoksa kendi yolumla mı gelmeliyim? Mümkünse tekerlekleri yeniden icat etmemeyi tercih ederim ve bu sadece görünüşe göre en iyi yaklaşım olmayabilir.
Bu yaklaşımı, dizeden temsilci nesnesine gitmek için denetleyiciye özel bir bağlayıcı kaydederek kullandım (bu merkezi dwb önerdiği kod). – Nate