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

Posted

技术标签:

【中文标题】Omnifaces CDN 资源处理程序中的 EL 表达式未在 Wildfly 9 中解析【英文标题】:EL expressions in Omnifaces CDN resource handler not resolved in Wildfly 9 【发布时间】:2015-09-24 15:04:55 【问题描述】:

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

【问题讨论】:

【参考方案1】:

这是 WildFly 9 的 Weld 实现中的错误修复的结果。根据问题 CDI-525、WELD-1941 和 WFLY-4877,CDI 规范似乎与 JavaBeans specification 不一致,以防万一不合格的类名以两个以上的大写字母开头。 CDI 规范仅在规范中声明如下,而 Weld 最初遵循 JavaBeans 规范:

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

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

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

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

此问题与 OmniFaces 无关。


与具体问题无关,去掉 URL 中的双斜杠。

【讨论】:

以上是关于Omnifaces CDN 资源处理程序中的 EL 表达式未在 Wildfly 9 中解析的主要内容,如果未能解决你的问题,请参考以下文章

在较新版本的 JSF 中,@FacesValidator 和 @FacesConverter 中的 EJB 和 CDI 注入点无法通过 OmniFaces 工作

Vue中使用cdn加载资源

WebFilter使用omnifaces获得404而不工作

org.omnifaces.VetoAnnotatedTypeExtension.processAnnotatedType(@Observes ProcessAnnotatedType) 接收所有带注

nginx代理cdn静态文件不一致

什么是负载均衡?CDN如何负载均衡流量?