我对关于 JSF EL 中静态方法调用的这个问题的答案感到困惑。
我在
@Named
bean 中有一个带有公共静态方法的类:
@Named
public class StaticMethods {
private static final ILogger logger = LogFactory.getLogger(StaticMethods.class);
public static void doSomething() {
logger.info("called static void doSomething()");
}
}
在我的 JSF 页面中我这样使用它:
#{staticMethods.doSomething()}
该方法被调用,如 WildFly
server.log
:
09:47:22,977 INFO [Lumin-WEB#default task-32] Chrome 2bfb483b-c5c1-4079-a3bf-1dd13ec4425b a.l.m.w.u.StaticMethods: called static void doSomething()
此行为如何对应于已接受的答案以及 EL 规范(其中提到必须显式导入类才能引用其静态方法)?
这是在我的情况下起作用的原因吗,因为我在我的
bean-discovery-mode="all"
中使用 beans.xml
?
我的 WildFly-23.0.2.Final 正在使用
Mojarra 2.3.14.SP04
实现 jboss-el-api_3.0_spec
自 EL 版本 3.0 起确实支持,但仅当您使用带有括号 ()
的方法表达式语法
时,如
#{bean.method()}
中所示。
这只适用于其中提到必须显式导入类,然后才能引用其静态方法
static fields,不适用于静态方法。
不,bean 发现模式对 EL 属性解析没有任何影响。它仅影响 bean(基础、这是在我的情况下起作用的原因吗,因为我在 beans.xml 中使用 bean-discovery-mode="all" ?
#{bean}
的
#{bean.method()}
部分)是否可以解析。