我可以在 EL 中调用静态方法,这是符合规范的吗?

问题描述 投票:0回答:1

我对关于 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

jsf static-methods el
1个回答
0
投票

自 EL 版本 3.0 起确实支持,但当您使用带有括号 () 的方法表达式语法

时,如 
#{bean.method()}
 中所示。

其中提到必须显式导入类,然后才能引用其静态方法

这只适用于

static fields,不适用于静态方法。

这是在我的情况下起作用的原因吗,因为我在 beans.xml 中使用 bean-discovery-mode="all" ?

不,bean 发现模式对 EL 属性解析没有任何影响。它仅影响 bean(基础、

#{bean}

#{bean.method()}
 部分)是否可以解析。

© www.soinside.com 2019 - 2024. All rights reserved.