2011-10-02 95 views
0

我正在阅读一些关于EL用户定义函数的JSP文本,作者说这些函数必须声明为静态,并没有给出任何其他解释。我试图申报非静态功能,并得到了一个org.apache.jasper.JasperException: java.lang.NullPointerException.....为什么jsp中的EL函数必须声明为静态?

请问能有人详细说明吗?

回答

1

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

1

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

这是最新版本的表达式语言(来自JSP 2.1)允许您执行的操作。它可以调用方法(非静态函数):

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

(原EL允许你只叫干将,使用${bean.property}语法)。

1

简短的回答:因为JavaServer Pages Specification, JSP.2.10 Functions说:

功能映射到Java类的public static方法。

两个小技巧,为什么它必须是静态的:

  • 由于历史的原因,

  • 出于性能的考虑。

今天,它不是一个大问题,以创建一个新的对象实例与一个无参数的构造函数,然后调用函数方法,让垃圾回收器摆脱实例。如果你在大循环中使用函数,它可能会受到伤害,但通常这不是问题。

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

相关问题