在jsp中迭代列表时出现问题

时间:2012-02-21 11:39:23

标签: jsp jstl

我的jsp文件中有以下代码:

    <c:set var="urls" value="<%LoginServlet.getAvailableUrlsConfig();%>" />
    <c:forEach var="url" items="${urls}">
        <c:out value="${url}"/>  
    </c:forEach>

getAvailableUrlsConfig()是一个返回字符串数组的静态方法。

我不明白为什么它不打印任何东西。 ..

如果我使用它:

<%out.println(LoginServlet.getAvailableUrlsConfig()); %>

打印出列表的内容。你能看到任何问题吗?

2 个答案:

答案 0 :(得分:0)

这对我有用:

<% pageContext.setAttribute("urls", LoginServlet.getAvailableUrlsConfig()); %>
<c:forEach var="url" items="${urls}">
    <c:out value="${url}"></c:out>
</c:forEach>

似乎不喜欢使用&lt; %%&gt;在jstl

答案 1 :(得分:0)

@Cristian我不会称自己为专家,而是我对你的问题的一些看法,ps。试图将此添加为评论,但我需要更多的字符!

我相信你的c:set你需要将语法作为表达式(而不是scriplet,因为它被<%..%>标记所包围,所以不会打印任何内容。)。

表达式<%=..%> =对于表达式,计算表达式的结果将转换为字符串并直接包含在输出页面中。这里=部分表示它应该打印出标记内代码的返回值,而scriptlet是语句。请注意,当您使用表达式时,它不需要分号。

恕我直言,我认为如果可能的话,最好尽可能避免scriplets / expression,我会在请求/会话上设置任何值或在页面bean对象上设置它们。这样jsps很干净,有利于可读性,但当然取决于你的特定问题/场景。

您可能会发现以下链接也很有用http://java.sun.com/developer/onlineTraining/JSPIntro/contents.html&amp; http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPIntro7.html

希望这有帮助。