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

时间:2015-07-07 08:18:15

标签: jsf jsf-2.2 wildfly omnifaces

我正在玩新的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 Omnifaces:2.1

1 个答案:

答案 0 :(得分:1)

WildFly 9的Weld实施中的错误修正的后果。根据问题CDI-525WELD-1941WFLY-4877,CDI规范似乎与{不一致{3}}关于默认的托管bean名称,以防非限定类名以两个以上的大写字母开头。 CDI规范仅在规范中如下所述,而Weld最初遵循JavaBeans规范:

  

在将第一个字符转换为小写字母后,托管bean的默认名称是bean类的非限定类名。

Weld被重新接受了字面意思。 CDNResourcesBean现已注册为#{cDNResourcesBean},而不是#{CDNResourcesBean}

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

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

此问题与OmniFaces无关。

无关到具体问题,摆脱URL中的双尾斜线。