为什么jsp中的EL函数必须声明为static?

发布于 2024-12-07 19:09:39 字数 173 浏览 0 评论 0原文

我正在阅读一些有关 EL 用户定义函数的 JSP 文本,作者说这些类型的函数必须声明为静态,并且没有给出其他解释。我试图声明非静态函数,但得到了 org.apache.jasper.JasperException: java.lang.NullPointerException.....

任何人都可以详细说明一下吗?

I am reading some JSP text regarding EL user-defined functions, and the author said these kinds of functions must be declared static and gave no other explanation. I have tried to declare non-static functions and got a org.apache.jasper.JasperException: java.lang.NullPointerException.....

Can any one elaborate on that, please?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

榆西 2024-12-14 19:09:39

如果它们不是静态的,运行时将负责创建包含函数的类的实例。导致对这些对象进行状态管理 - 这实际上意味着您应该编写一个自定义标签。您应该仅将EL 函数视为帮助程序,在大多数情况下,您将需要创建自定义标签。

If they were not static, the runtime would be in charge of creating instances of the classes containing the functions. Resulting in state management on those objects - which in fact means you should have written a custom tag instead. You should treat EL functions as helpers only, in most cases you will want to create custom tags.

携余温的黄昏 2024-12-14 19:09:39

如果这些函数不是静态的,您将需要一些实例来调用这些方法。

这就是最新版本的表达式语言(JSP 2.1)允许您做的事情。它可以调用方法(非静态函数):

${bean.doSomethingGreat('with argument')}

(原始 EL 允许您仅调用 getter,使用 ${bean.property} 语法)。

If those functions were not static, you would need some instance to call those methods on.

This is what latest version of Expression Language (from JSP 2.1) allows you to do. It can call methods (non-static functions):

${bean.doSomethingGreat('with arguments')}

(Original EL allowed you to call getters only, using ${bean.property} syntax).

§对你不离不弃 2024-12-14 19:09:39

简短回答:因为 JavaServer Pages 规范,JSP.2.10函数表示:

函数映射到 Java 类中的公共静态方法。

为什么它必须是静态的有两个提示:

  • 出于历史原因,

  • 出于性能原因。

如今,使用无参数构造函数创建一个新的对象实例,然后调用函数方法并让垃圾收集器删除该实例,这并不是什么大问题。如果您在大循环中使用该函数,可能会造成伤害,但通常这不是问题。

实例方法更适合测试驱动的世界,因为它比静态方法更容易在测试中进行模拟。

Short answer: because the JavaServer Pages Specification, JSP.2.10 Functions said that:

Functions are mapped to public static methods in Java classes.

Two tips why it has to be static:

  • for historical reasons,

  • for performance reasons.

Today it's not a big deal to create a new object instance with a no-arg constructor then call the function method and let the garbage collector to get rid of the instance. If you are using the function in a big loop it could hurt but usually it's not a problem.

The instance methods would fit better with the test-driven world since it's easier to mock in tests than static methods.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文