如何使用JSTL / EL从JSP调用Java类中定义的参数的Java方法。该方法返回数组。可以使用任何返回值。
答案 0 :(得分:59)
如果要定位并运行与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>
或甚至将另一个变量作为参数
<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函数。你可以在this blog底部附近找到一个启动示例。你最终会喜欢这样的东西:
<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);
}
答案 1 :(得分:4)
以上解决方案对我没有用。
我的java类中有一个函数getRemitanceProfileInformation(user)
。
我创建了一个java类的usebean,然后调用了
<c:set var="paymentValueCode" value='remittanceaddr.getRemitanceProfileInformation("${user}")'/>
并且有效。
答案 2 :(得分:2)
为JSP提供对具有该方法的类的实例的引用并调用它。
你可能会问谁给JSP提供了这个实例 - 它是model-2 MVC安排中的servlet。
以下是流程的工作原理:
答案 3 :(得分:0)
如果您正在使用JSF,则可以使用bean act作为View Scope中的模型,并自动从数据源加载。如果你正在使用JSP,那么如何使用TLD Tag?并使用JSTL标记<c:foreach>
?它可以节省内存保存在会话中,还是保存在会话中并在加载事件完成后将其删除?有点像这样(JSTL + TLD)
<c:forEach items="${myTag:getProductByPage(page)}" var="p">
Product name: ${p.productName}
</c:forEach>