如何使用JSTL / EL从JSP调用参数化方法
如何使用JSTL / EL从JSP中调用具有Java类中定义的参数的Java方法。 该方法正在返回数组。 任何返回值都可以使用。
如果你的目标是运行一个Servlet 3.0兼容的容器(例如Tomcat 7,Glassfish 3,JBoss AS 6等),并且声明符合Servlet 3.0的web.xml
,那么你只能在EL中调用带有参数的方法。 这个servlet版本与EL 2.2一起,允许调用具有参数的任意实例方法。
假设你有一个${bean}
的作用域引用了一个像public Object[] getArray(String key)
那样的类的实例,那么你应该可以这样做:
<c:forEach items="${bean.getArray('foo')}" var="item"> ${item} <br /> </c:forEach>
甚至用另一个variables作为参数
<c:forEach items="${bean.getArray(foo)}" var="item"> ${item} <br /> </c:forEach>
但是,如果你不瞄准一个Servlet 3.0容器,那么你就不能在EL中调用带有参数的方法。 你最好的select就是按照Duffymo的build议,在预处理servlet中完成这项工作。
Object[] array = bean.getArray("foo"); request.setAttribute("array", array); // ...
作为一个完全不同的select,你可以创build一个委托方法调用的EL函数。 你可以在这个博客的底部附近find一个开球的例子。 您最终想要的结果如下所示:
<c:forEach items="${util:getArray(bean, 'foo')}" var="item"> ${item} <br /> </c:forEach>
同
public static Object[] getArray(Bean bean, String key) { return bean.getArray(key); }
上述解决scheme没有为我工作。 我有一个函数getRemitanceProfileInformation(user)
在我的Java类。 我创build了一个java类的usebean,然后调用
<c:set var="paymentValueCode" value='remittanceaddr.getRemitanceProfileInformation("${user}")'/>
它的工作。
给JSP一个具有该方法的类的实例的引用并调用它。
您可能会问是谁给JSP提供了这个实例 – 这是一个模型-2 MVC安排中的servlet。
以下是stream程的工作原理:
- 从JSP提交一个GET / POST请求到一个servlet。
- Servlet根据这个请求进行操作,并代表JSP做一些工作。 将所有必要的对象放在请求,会话或其他合适的范围内。
- Servlet将响应路由到下一个JSP,这可能与请求的JSP相同。
- 冲洗,重复。
如果您使用的是JSF,则可以在View Scope中将Bean用作模型,并从数据源自动加载。 如果您使用JSP,那么使用TLD标签怎么样? 并使用JSTL标签<c:foreach>
? 它会保存内存不会保存在会话中,或保存在会话中并在加载事件完成时将其删除? 一些如何这样(JSTL + TLD)
<c:forEach items="${myTag:getProductByPage(page)}" var="p"> Product name: ${p.productName} </c:forEach>