2009-12-02 53 views
5

是有可能的值用一個HashMap添加值的ArrayList使用JSTL

像添加到一個ArrayList,而不是:

<jsp:useBean id="animalList" class="java.util.ArrayList" /> 

<c:set target="${animalList}" value="Sylvester"/> 

<c:set target="${animalList}" value="Goofy"/> 

<c:set target="${animalList}" value="Mickey"/> 

<c:forEach items="${animalList}" var="animal"> 

${animal}<br> 

</c:forEach>  

現在得到的錯誤:

javax.servlet.jsp.JspTagException: Invalid property in &lt;set&gt;: "null" 

THX

回答

1

上述代碼無法正常工作。

以下是代碼必須放置在文件animals.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 
<c:forEach var="animal" items="${animals}"> 
    <c:set var="animalName" value="${animal}"/> 
    <c:out value="${animalName}"/> 
</c:forEach> 
+4

OP已經使用JSTL,在我的回答中沒有必要提及它。很明顯,必須聲明taglib才能解析標籤。另外,你的taglib URI遠沒有過時。之間必須有一個'/ jsp'。 – BalusC 2010-10-09 15:25:07

11

JSTL不是爲了做這種事情而設計的。這真的屬於(直接)由servlet類控制的業務邏輯。

創建servlet這確實喜歡:

protected void doGet(HttpServletRequest request, HttpServletResponse response) { 
    List<String> animals = new ArrayList<String>(); 
    animals.add("Sylvester"); 
    animals.add("Goofy"); 
    animals.add("Mickey"); 
    request.setAttribute("animals", animals); 
    request.getRequestDispatcher("/WEB-INF/animals.jsp").forward(request, response); 
} 

地圖這對/animalsurl-pattern

現在創建/WEB-INF/animals.jsp JSP文件(放置在WEB-INF防止直接訪問):

<c:forEach items="${animals}" var="animal"> 
    ${animal}<br> 
</c:forEach> 

無需jsp:useBean作爲servlet的已設置。

現在通過http://example.com/context/animals調用servlet + JSP。

+0

是可以運行c行:對未作用域頁,會話等一個ArrayList()的foreach?例如,如果數組列表是具有getter/setter的類中的一個屬性。 – 2011-03-22 17:45:30

+2

@robert:當然可以。只需將該類放入作用域中,並使用'items =「$ {bean.list}」'',其中'$ {bean}'指向具有'getList()'方法的類,並返回該列表。 – BalusC 2011-03-22 17:45:57

+1

謝謝你,你很快! – 2011-03-22 17:50:52