2009-03-29 10 views
5

Nesnelerin listesini jsp cinsinden farklı türlerde düzgün bir şekilde nasıl işlersiniz? Örneğin, bu farklı nesneleri belirli bir sırada render etmeliyim.JSP'de özel oluşturma, sınıf türüne göre yok

bir yolu ortak bir tip değişken veya instanceof kullanmak olabilir ama, bu ifade hepsini yönetmek için ise büyük bir anahtarı/sahip olmak demektir:

<c:forEach var="o" items="${bigListofObjects}" > 
    <c:choose> 
     <c:when test='${o.type=="simple"}' > 
     <!-- render simple --> 
     </c:when> 
     <c:when test='${o.type=="complex"}' > 
     <!-- render complex --> 
     </c:when> 
     <!-- etc etc ... --> 
    </c:choose> 
</c:forEach> 

Her sınıfa bir render() yöntemi ekleyin ama o zaman bu, görünümü kodun geri kalanıyla karıştırmak anlamına gelir.

Daha sonra başka bir tür oluşturmak istiyorsam ne olur? Özel jsp etiketleriyle yapabileceğim bir şey var mı?

cevap

6

Belirli bir tür için doğru oluşturma işlemini yapacak başka bir jsp ekleyebilirsiniz. Örneğin:

<c:forEach var="o" items="${bigListofObjects}" > 
    <c:import url="render-${o.type}.jsp"/> 
</c:forEach> 
0

Sen bir dış forEach döngü var ki türleri listesinde listesi üzerinde dolaşır: Her sınıf o yayılan uygulamak için ortak bir yöntem ile bir arayüz oluşturabilir

<c:forEach var="t" items="${listOfTypes}"> 
    <c:forEach var="o" items="${bigListofObjects}"> 
     <if test='${o.type==t}'> 
      <!-- render --> 
     </c:if> 
    </c:forEach> 
</c:forEach> 
1

polimorfik bir şekilde ihtiyaç duyduğunuz HTML/JSP. Bu öneri hakkında o kadar da çılgın değilim çünkü kullanıcı arayüzünü model sınıflarına kötü bir şekilde sızdırıyor. Belki de başka bir yolu sizin için UI yayabilecek bir Ziyaretçi kalıbı olurdu.

Her iki durumda da, yeni bir tür belirdiğinde kod eklemeniz gerekir.

Özel etiket kitaplığı oluşturmakta isteksiz olurum. Stili cildin imkansız hale getirmesini sağlamak için bu tarzın sızmamasına özen göstermelisiniz.