Java Struts forEach标记未遍历ArrayList

Java Struts forEach标记未遍历ArrayList,java,struts,foreach,iteration,Java,Struts,Foreach,Iteration,我有一些密码!代码如下所示: <c:forEach var="element" items="%{serviceList.getServices()}"> <p>Hello!</p> </c:forEach> <c:forEach var="element" items="${serviceList.services}"> <p>Hello!</p> </c:forEach>

我有一些密码!代码如下所示:

<c:forEach var="element" items="%{serviceList.getServices()}">
        <p>Hello!</p>
</c:forEach>
<c:forEach var="element" items="${serviceList.services}">
  <p>Hello!</p>
</c:forEach>

你好!

“serviceList”是一个bean,其上有一个名为getServices()的方法。getServices()返回一个ArrayList,因此我自然假设上面的代码将获取ArrayList,并对其进行迭代,将列表中的每个元素放入变量“element”中

不是这样!当我查看页面时,Hello会被打印一次(getServices()的大小为2,我可以通过在页面上打印出来直接显示出来)

标签本身可以工作:

<c:forEach begin="1" end="10">Hello, World!<br></c:forEach>
你好,世界!
打印出你想要的。所以这一定和我传递的物品有关。有什么帮助吗


哦,这是使用JSTL 1.1.2、Struts 2.1.6和最新版本的Java。

如果您输入了错别字,您应该像这样使用
${variable name}

<c:forEach var="element" items="%{serviceList.getServices()}">
        <p>Hello!</p>
</c:forEach>
<c:forEach var="element" items="${serviceList.services}">
  <p>Hello!</p>
</c:forEach>

你好!


然后,行为将如您所期望的那样。

如果您有输入错误,您应该像这样使用
${variable name}

<c:forEach var="element" items="%{serviceList.getServices()}">
        <p>Hello!</p>
</c:forEach>
<c:forEach var="element" items="${serviceList.services}">
  <p>Hello!</p>
</c:forEach>
${serviceList.services}

你好!

然后行为就会如你所期望的那样

${serviceList.services}
您的表达式语言语法不正确。有关详细信息,请参阅的EL部分


您的表达式语言语法不正确。有关详细信息,请参阅的EL部分。

您使用的是jstl核心标记forEach,它不是Struts的一部分。Struts标记提供相同的功能。您使用的是jstl核心标记forEach,它不是Struts的一部分。Struts标记提供相同的功能。EL(从JSP 2.1开始)不允许您在实例上调用方法;您只能将自定义函数映射为静态方法。(尽管JEE6等人提供了更好的方法支持。)@McDowell-谢谢,只是从问题中复制了它-我将编辑并更正它。EL(从JSP 2.1开始)不允许您在实例上调用方法;您只能将自定义函数映射为静态方法。(尽管JEE6等人提供了更好的方法支持。)@McDowell-谢谢,只是从问题中复制下来-我会编辑并更正它。