Omnifaces CDN 资源处理程序中的 EL 表达式未在 Wildfly 9 中解析

EL expressions in Omnifaces CDN resource handler not resolved in Wildfly 9

我正在玩新的 Wildfly 9.0.0.Final。部署我的 JSF2.2 Web 应用程序后,Omnifaces2.1 CDNResourceHandler 停止解析 EL 表达式。

我在web.xml中的定义:

<context-param>
    <param-name>org.omnifaces.CDN_RESOURCE_HANDLER_URLS</param-name>
    <param-value>
        styles:*=#{CDNResourcesBean.styles}/*
    </param-value>
</context-param>

在 .xhtml 中,style.css 文件存在于项目结构的资源中

<h:outputStylesheet library="styles" name="style.css"/>

生成HTML:

<link type="text/css" rel="stylesheet" href="/style.css" />

我的 CDNResourceBean

@Named
@RequestScoped
public class CDNResourcesBean {
    public String getStyles() {
        return "https://abcdef.cloudfront.net/";
}

据我所知,调用了 CDNResourceHandler,它替换了链接,但由于未知原因,El 表达式 #{CDNResourcesBean.styles} 被忽略了。

我应该如何让它工作?是CDI配置问题,Bean初始化顺序问题,CDNResourceHandler与新WF不兼容的问题吗?

技术: 应用服务器:Wildfly 9.0.0.Final 全脸:2.1

这是 WildFly 9 的 Weld 实现中错误修复的结果。根据问题 CDI-525, WELD-1941 and WFLY-4877, the CDI spec appears to be not consistent with JavaBeans specification 关于默认托管 bean 名称,以防不合格的类名以两个以上的大写字母开头。 CDI 规范只是在规范中声明如下,而 Weld 最初是遵循 JavaBeans 规范:

The default name for a managed bean is the unqualified class name of the bean class, after converting the first character to lower case.

Weld 被放回去以按字面意思理解。 CDNResourcesBean 现在注册为 #{cDNResourcesBean} 而不是 #{CDNResourcesBean}

目前,如果您打算遵循 JavaBeans 规范,那么最好的办法是显式指定托管 bean 名称。

@Named("CDNResourcesBean")
@RequestScoped
public class CDNResourcesBean {}

此问题与 OmniFaces 无关。


与具体问题无关,去掉 URL.

中的双斜杠