如何用JSTL/EL调用JSP中的参数化方法

9gm1akwq  于 2022-12-25  发布在  其他
关注(0)|答案(4)|浏览(173)

如何使用JSTL/EL从JSP调用一个在Java类中定义了参数的Java方法。该方法返回数组。可以使用任何返回值。

0s0u357o

0s0u357o1#

如果您的目标和运行的是 * 至少 * 一个Servlet 3.0兼容容器(例如Tomcat 7或更新版本、WildFly 8或更新版本、GlassFish 3或更新版本等),且声明的web.xml符合 * 至少 * Servlet 3.0,则只能调用EL中带参数的方法。此servlet版本随附EL 2.2,允许调用带参数的任意示例方法。
假设作用域中有一个${bean},它引用了一个类的示例,该类有一个类似public Object[] getArray(String key)的方法,那么你应该能够做到这一点:

<c:forEach items="${bean.getArray('foo')}" var="item">
    ${item} <br />
</c:forEach>

或者甚至使用另一个变量作为参数

<c:forEach items="${bean.getArray(foo)}" var="item">
    ${item} <br />
</c:forEach>

但是如果您不以Servlet 3.0容器为目标,那么您根本无法使用EL中的参数调用方法,最好的办法是按照Duffymo的建议,在预处理servlet中完成这项工作。

Object[] array = bean.getArray("foo");
request.setAttribute("array", array);
// ...

作为一个完全不同的替代方案,您可以创建一个EL函数来委托方法调用。您可以在此答案的选项2中找到一个启动示例如何在JSP/EL中调用静态方法?

<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);
}

web.xml文件绝对不应该在顶部有<!DOCTYPE>行,否则仍然会强制使用Servlet 2.3模式。您可以在此答案的后半部分找到正确的web.xml声明示例如何安装JSTL?绝对URI:无法http://java.sun.com/jstl/core解析www.example.com

pzfprimi

pzfprimi2#

上面的解决方案对我不起作用,我的java类中有一个函数getRemitanceProfileInformation(user),我创建了一个java类的usebean,然后调用

<c:set var="paymentValueCode" value='remittanceaddr.getRemitanceProfileInformation("${user}")'/>

而且奏效了。

qxgroojn

qxgroojn3#

为JSP提供一个对具有该方法的类的示例的引用并调用它。
您可能会问是谁给了JSP这个示例--它是model-2 MVC安排中的一个servlet。
流程如下:
1.从JSP向servlet提交GET/POST请求。

  1. Servlet处理该请求并代表JSP做一些工作,将所有必需的对象放入请求、会话或其他适当的范围。
  2. Servlet将响应路由到Next.jsP,该JSP可能与请求JSP相同。
    1.冲洗,重复。
fsi0uk1n

fsi0uk1n4#

如果你使用JSF,你可以使用bean作为视图范围中的模型,并从数据源自动加载。如果你使用JSP,使用TLD标签怎么样?使用JSTL标签<c:foreach>怎么样?它节省了在会话中保存的内存,或者保存在会话中并在加载事件完成时删除它?有点像这样(JSTL+TLD)

<c:forEach items="${myTag:getProductByPage(page)}" var="p">
     Product name: ${p.productName}
</c:forEach>

相关问题