【发布时间】:2013-02-09 23:39:22
【问题描述】:
为了使 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 莫哈拉 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
【问题讨论】:
-
你解决这个问题了吗?
-
@MahmoudSaleh 不是真的! WEB.XML 中的 DIRECTIONN 是在运行时加载的!不是动态的!所以就目前而言,我只是使用每个组件的“dir”属性,它从方法 public String getDirection(){} 中检索其值。我在 PrimeFaces 论坛上发布了这个问题,但几个月以来没有答案!
标签: jsf jakarta-ee primefaces