【问题标题】:How to iterate list in JSTL?如何在 JSTL 中迭代列表?
【发布时间】:2014-05-01 07:09:27
【问题描述】:
<c:forEach items="<% EasyLookUp.lookUpList(EasyLookUp.PriceSources); %>" var="priceSourceItem">
                                    ${priceSourceItem }
                                </c:forEach>

这是我的代码,但是页面显示

只有一条记录,java代码不起作用。谁能告诉我怎么处理?

【问题讨论】:

    标签: jsp jstl


    【解决方案1】:

    不要使用小脚本:

    写一个Servlet 转发到你的JSP 资源。在Servletservice(..) 方法(或HttpServletdoXXX(..) 方法)中,添加一个带有EasyLookup 方法返回值的请求属性。

    request.setAttribute("lookupResult", EasyLookUp.lookUpList(EasyLookUp.PriceSources));
    // forward to JSP
    

    然后使用EL来解析你JSP中的属性

    <c:forEach items="${lookupResult}" var="priceSourceItem">
         ${priceSourceItem }
    </c:forEach>
    

    【讨论】:

    • 我得到了我的解决方案:&lt;% pageContext.setAttribute("PriceSources", EasyLookUp.lookUpList(EasyLookUp.PriceSources)); %&gt; &lt;c:forEach items="${PriceSources }" var="priceSourceItem"&gt; ${priceSourceItem } &lt;/c:forEach&gt;,但我认为您的解决方案更好,但不适合我。
    • @jesse 是的,您正在使用页面属性,这是一个比请求属性更严格的范围。如果您从我的回答中拿走任何东西,应该是这样的:不要使用脚本
    • 你的anwser很好,我们应该避免scriptlet,但是我的bean中的属性都是原始的,它不能在页面上显示。
    • @jesse 对不起,我不明白。 beanoriginal 是什么意思?你的意思是你不知道lookUpList 会返回什么类型?
    • 例如国家,bean中的列是countryId,就像1, 2...但是在页面上,它应该显示为“US”,“UK”。我的英文不好~不知道怎么准确表达
    【解决方案2】:

    jstlforeach循环中,不需要传递带有jstl标签的列表

    <c:forEach items="${EasyLookUp.PriceSources}" var="priceSourceItem">
           ${priceSourceItem }
    </c:forEach>
    

    【讨论】: