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 工作
org.omnifaces.VetoAnnotatedTypeExtension.processAnnotatedType(@Observes ProcessAnnotatedType) 接收所有带注