sac*_* gk 44 jsp jstl el parameter-passing methodexpression
如何使用JSTL/EL从JSP调用Java类中定义的参数的Java方法.该方法返回数组.可以使用任何返回值.
Bal*_*usC 61
如果您要使用web.xml声明的符合Servlet 3.0的目标并运行与Servlet 3.0兼容的容器(例如Tomcat 7,Glassfish 3,JBoss AS 6等),则只能在EL中调用带参数的方法.这个servlet版本附带了EL 2.2,它允许使用参数调用任意实例方法.
假设你${bean}在范围内引用了一个具有类似方法的类的实例public Object[] getArray(String key),那么你应该能够这样做:
<c:forEach items="${bean.getArray('foo')}" var="item">
${item} <br />
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
甚至用另一个变量作为参数
<c:forEach items="${bean.getArray(foo)}" var="item">
${item} <br />
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
但是如果你没有针对Servlet 3.0容器,那么就不能在EL中调用带有参数的方法.最好的办法是按照Duffymo的建议在预处理servlet中完成这项工作.
Object[] array = bean.getArray("foo");
request.setAttribute("array", array);
// ...
Run Code Online (Sandbox Code Playgroud)
作为一个完全不同的替代方案,您可以创建一个委托方法调用的EL函数.您可以在本博客底部附近找到一个启动示例.你最终会喜欢这样的东西:
<c:forEach items="${util:getArray(bean, 'foo')}" var="item">
${item} <br />
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
同
public static Object[] getArray(Bean bean, String key) {
return bean.getArray(key);
}
Run Code Online (Sandbox Code Playgroud)
为 JSP 提供对具有该方法的类实例的引用并调用它。
您可能会问谁为 JSP 提供了该实例 - 它是 model-2 MVC 安排中的一个 servlet。
该流程的工作原理如下: