如何使用 JSTL/EL 从 JSP 调用参数化方法
如何使用 JSTL/EL 从 JSP 调用 Java 类中定义的带有参数的 Java 方法。该方法返回数组。可以使用任何返回值。
How to call a Java method with arguments which is defined in Java class, from JSP using JSTL/EL. The method is returning arrays. Any return value can be used.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您的目标是并运行至少一个 Servlet 3.0 兼容容器(例如 Tomcat 7 或更新版本、WildFly 8 或更新版本、GlassFish 3 或更新版本等),则只能在 EL 中调用带有参数的方法
web.xml
声明至少符合 Servlet 3.0。该 servlet 版本随 EL 2.2 一起提供,允许使用参数调用任意实例方法。假设您的作用域中有一个
${bean}
,它引用一个类的实例,该类的实例具有类似于public Object[] getArray(String key)
的方法,那么您应该能够执行此操作:或者甚至使用另一个变量作为参数
但是如果您不以 Servlet 3.0 容器为目标,那么您根本无法在 EL 中调用带有参数的方法。最好的选择是按照 Duffymo 的建议在预处理 servlet 中完成这项工作。
作为完全不同的替代方案,您可以创建一个委托方法调用的 EL 函数。您可以找到一个启动示例作为此答案的选项 2 如何在 JSP/EL 中调用静态方法? 您希望最终得到如下结果:
web.xml 文件绝对不应该有
行位于顶部,否则仍会强制使用 Servlet 2.3 方式。您可以在本答案的后半部分找到正确的
web.xml
声明示例 如何安装 JSTL?绝对uri:http://java.sun.com/jstl/core无法解析。You can only invoke methods with arguments in EL if you're targeting and running at least a Servlet 3.0 compatible container (e.g. Tomcat 7 or newer, WildFly 8 or newer, GlassFish 3 or newer, etc) with a
web.xml
declared conform at least Servlet 3.0. This servlet version comes along with EL 2.2 which allows invoking arbitrary instance methods with arguments.Assuming that you've a
${bean}
in the scope which refers to an instance of a class which has a method something likepublic Object[] getArray(String key)
, then you should be able to do this:or even with another variable as argument
But if you don't target a Servlet 3.0 container, then you cannot invoke methods with arguments in EL at all. Your best bet is to just do the job in the preprocessing servlet as suggested by Duffymo.
As a completely different alternative, you could create an EL function which delegates the method call. You can find a kickoff example as option 2 of this answer How to call a static method in JSP/EL? You'd like to end up something like as:
with
The
web.xml
file should absolutely not have a<!DOCTYPE>
line in top as that would otherwise still force the Servlet 2.3 modus. You can find examples of properweb.xml
declarations in the second half of this answer How to install JSTL? The absolute uri: http://java.sun.com/jstl/core cannot be resolved.上述解决方案对我不起作用。
我的 java 类中有一个函数
getRemitanceProfileInformation(user)
。我创建了一个java类的usebean,然后调用它
并且它起作用了。
The above solution didnt work for me.
I had a function
getRemitanceProfileInformation(user)
in my java class.I created a usebean of java class and then invoked
and it worked.
为 JSP 提供对具有该方法的类实例的引用并调用它。
您可能会问谁为 JSP 提供了该实例 - 它是 model-2 MVC 安排中的一个 servlet。
该流程的工作原理如下:
Give the JSP a reference to an instance of the class that has the method and call it.
You're probably asking who gives the JSP that instance - it's a servlet in the model-2 MVC arrangement.
Here's how the flow will work:
如果您使用 JSF,则可以使用 bean 作为 View Scope 中的模型,并自动从数据源加载。如果您使用 JSP,那么使用 TLD 标签怎么样?并使用 JSTL 标签
?它是通过保存在会话中来节省内存,还是保存在会话中并在加载事件完成时将其删除?有点像这样(JSTL+TLD)If you're using JSF, you can use an bean act as a model in View Scope, and load from data source automatic. And if you're using JSP, how about using TLD Tag? And using JSTL tag
<c:foreach>
? It's saves the memory from saving in the session, or save in session and remove it when load event done? Some how like this (JSTL+TLD)