如何使用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程的工作原理:

  1. 从JSP提交一个GET / POST请求到一个servlet。
  2. Servlet根据这个请求进行操作,并代表JSP做一些工作。 将所有必要的对象放在请求,会话或其他合适的范围内。
  3. Servlet将响应路由到下一个JSP,这可能与请求的JSP相同。
  4. 冲洗,重复。

如果您使用的是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>