2

当浏览器的 Accept-Language 在我的 JSF 应用程序中是阿拉伯语时,我想在 inputText 中呈现文本方向 rtl(从右到左)。当 Accept-Language 为英语时,用户介绍的文本将是 dir="ltr"(从左到右)。我该怎么做?

4

1 回答 1

6

客户端Accept-Language可以通过 间接获得UIViewRoot#getLocale()。在UIViewRootEL 中又可以作为#{view}. 所以,这应该这样做:

<h:inputText ... dir="#{view.locale.language eq 'ar' ? 'rtl' : 'ltr'}" />

请注意,所有其他组件和dirHTML 元素也支持.<h:form><html>

<html ... dir="#{view.locale.language eq 'ar' ? 'rtl' : 'ltr'}">

除非被不同的 set 覆盖,否则它将应用于其所有子级dir。这将使您免于在所有子组件/元素上重复相同的属性。

另请注意,JSF 将仅接受在 中显式注册的语言<locale-config>环境faces-config.xml。因此,如果您还没有其中的内容,那么无论标题ar如何,上述内容都将不起作用。Accept-Language

<application>
    <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>ar</supported-locale>
        ...
    </locale-config>
</application>

如有必要,将逻辑移动到托管 bean,以便您最终可以如下所示:

<h:inputText ... dir="#{localeManager.dir}" />

也可以看看:

于 2015-06-03T20:35:09.807 回答