我正在玩新的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
答案 0 :(得分:1)
WildFly 9的Weld实施中的错误修正的后果。根据问题CDI-525,WELD-1941和WFLY-4877,CDI规范似乎与{不一致{3}}关于默认的托管bean名称,以防非限定类名以两个以上的大写字母开头。 CDI规范仅在规范中如下所述,而Weld最初遵循JavaBeans规范:
在将第一个字符转换为小写字母后,托管bean的默认名称是bean类的非限定类名。
Weld被重新接受了字面意思。 CDNResourcesBean
现已注册为#{cDNResourcesBean}
,而不是#{CDNResourcesBean}
。
目前,如果您打算遵循JavaBeans规范,那么最好的办法是明确指定托管bean名称。
@Named("CDNResourcesBean")
@RequestScoped
public class CDNResourcesBean {}
此问题与OmniFaces无关。
无关到具体问题,摆脱URL中的双尾斜线。