为了使PrimeFaces 3.5中的新 RTL 支持动态工作,我在web.xml中附加了以下内容:
<context-param>
<param-name>primefaces.DIR</param-name>
<param-value>#{facesBean.direction}</param-value>
</context-param>
如您所见,参数值是一个 EL表达式,从 bean 属性评估:方向:
private String direction = "ltr";
//......
public String getDirection() {
if (FacesContext.getCurrentInstance().getViewRoot().getLocale().getLanguage() == "ar") {
direction = "rtl";
} else {
direction = "ltr";
}
return direction;
}
但是这不起作用(我太天真了,不敢相信它可以以这种简单的方式工作,因为 web.xml 的加载方式与 xhtml 文件的加载方式不同......)
如果我明确告诉例如 ACCORDION 对方向值做出反应,它会成功(如果语言环境更改为 ar,dir 接收 rtl 值,如果更改为 fr 或 en,则 dir 属性接收的值是 ltr):
<p:accordionPanel dir="#{facesBean.direction}" id="accordion_services" dynamic="true" cache="true"
style="text-align: justify;" >
<p:tab title="#{i18n.seep}">
<h:panelGrid columns="2" cellpadding="10">
<!-- Remainder of code here ...... -->
我可以将后一种解决方案应用于每个具有 DIR 属性的 PrimeFaces 组件,但这会产生反效果并且会消耗大量时间。应用范围 DIR 参数是理想的解决方案,并声称它支持 EL 表达式。所以我有兴趣让它发挥作用。
有什么线索吗?
谢谢。
JBoss AS 7.1 Mojarra 2.1 PrimeFaces 3.5 最新 Firefox/Chrome
参考: PrimeFaces 3.5 用户指南的第 491 页:
*全局配置
使用 primefaces.DIR 全局设置来 rtl 指示 PrimeFaces RTL 感知组件,例如数据表、手风琴、tabview、对话框、树以 RTL 模式呈现。*
`<context-param>
<param-name>primefaces.DIR</param-name>
<param-value>rtl</param-value>
</context-param>`
参数值也可以是动态值的 EL 表达式。在即将发布的 PrimeFaces 版本中,更多组件将获得内置 RTL 支持。在那之前,如果您使用的组件不提供它,那么在您的应用程序中覆盖 css 和 javascript 将是解决方案。491