2010-02-10 15 views
8

Enum sınıfı USState var. Bir JSP’de eyaletler arasında geçiş yapmak istiyorum.EL? Kullanılarak bir JSP'den bir enum sınıfının değerlerine erişebilir miyim?

İlk olarak böyle bir listeyi nitelik olarak ayarlamadan USState s listesine erişmek mümkün mü? Görünüşe göre bir enum kadar statik bir şey her zaman mevcut olmalı, ama nasıl yapacağımı anlayamıyorum.

<c:forEach var="state" items="${USState.values}" > 
    <option value="${state}">${state}</option> 
</c:forEach> 
+0

http://stackoverflow.com/questions/2237135/how-can-i-produce-a-select-tag-using-jstl-or -standart-eylemler-in-a-jsp Struts kapmak değil mi? :) – BalusC

+0

Bence bunu yapacağım. Küçük bir şey yapıyorum ve ilk düşünce Struts'un gerekli olmamasıydı. –

cevap

9

Sen destek koduna yere bir listesini oluşturmak ve model parametre olarak iletin zorunda kalacak (çalışma hariç):

İşte aradığım buydu. Tercihen (BalusC tarafından tavsiye gibi) ve ServletContext (yani uygulama kapsamı) koymak bir ServletContextListener içinde: de (scriptlet'i kullanabilirsiniz Onun o kadar basit çok zararlı olduğunu sanmıyorum

servletContext.setAttribute("statesList", YourEnum.values()); 
+4

Zaten bir sabit olduğu için, gerekirse 'ServletContextListener' yardımıyla uygulama kapsamına koydum. Başka bir alternatif, özel bir EL çözümleyici veya EL işlevidir, ama bu biraz iş. – BalusC

+0

@BalusC: Bunu zaten yapmaya başladım. Doğru yaklaşımı kestirmem gerektiğini düşünmeye başladım. –

+4

'Arrays.asList()' çağrısına gerek olmadığından eminim. Sadece servletContext.setAttribute ("statesList", YourEnum.values ​​()); ' –

6

Not case):

<c:forEach var="state" items="<%= USState.values() %>" > 

(USState tam veya aşağıdaki gibi <%@ page import = "..." %>

+0

Bu, kodumun geçerli durumu. Çalışıyor, ama daha kolay yolu kaçırmam gerektiğini düşündüm. –

+1

Kişisel görüşüm, bunun diğer çözümlerden daha sürdürülebilir olmasıdır. Kısa ve fark etmeden değişebilen ve kırılabilecek dizelere güvenmenize gerek yok. Bu örnekte senaryolardan kaçmayacağım. –

9

Ayrıca Javabean onu sarmak için düşünebilirsiniz kullanarak içe ya olmalıdır:

package com.stackoverflow.q2240722; 

public class StateBean { 

    public State[] getValues() { 
     return State.values(); 
    } 

} 

Erişilebilir olduğundan Böylece <jsp:useBean> tarafından:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

<jsp:useBean id="stateBean" class="com.stackoverflow.q2240722.StateBean" /> 

<!doctype html> 
<html lang="en"> 
    <head> 
     <title>SO question 2240722</title> 
    </head> 
    <body> 
     <select> 
      <c:forEach items="${stateBean.values}" var="state"> 
       <option value="${state}">${state}</option>   
      </c:forEach> 
     </select> 
    </body> 
</html>