1

为了使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

4

1 回答 1

0

RTL 目前不支持 web.xml 中的 EL(我使用的是 PF 3.5)我已经为 PF 团队创建了一个功能请求

我在PF论坛上再次发布了这个问题,我在这里得到了答案

也可以看看:

在 web.xml 中使用 JSF EL 表达式

更新 其已修复,并将在即将推出的 Primefaces 4.1 中提供

于 2013-08-29T21:11:17.460 回答