1

我遇到了一些关于 Primefaces 的问题。有一个要求,当我们将顶部面板中的语言从英语更改为阿拉伯语时,整个布局应该显示在从右到左的位置(就像应用于所有内页的镜像一样)。请帮帮我。

我包括英文版布局、顶部面板和控制器 bean。

1.布局

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
<h:head>
 <title>Facelet Title</title>
        <style type="text/css">
            .ui-growl{
                left:20px;
            }
        </style>

</h:head>
<body>

    <ui:composition template="/home/template/common/commonLayout.xhtml">
        <ui:define name="content">




            <h:form enctype="multipart/form-data" dir="#{localeControllerBean.direction}" id="form1">
                <div id="add">
                <p:growl  id="msgs" autoUpdate="true" display="icon" style="left:20px"></p:growl>

                </div>
                <p:panel header="#{msg['sponsor_detail']}">
                    <h:panelGrid columns="2">
                    <f:event listener="#{localeControllerBean.islang}" type="preRenderView" />

                        <p:outputLabel for="sname" value="#{msg['sponsor_name']}"
                            styleClass="label" />
                        <p:inputText id="sname" value="#{sponsorBean.sponsor_name}"
                            required="true" requiredMessage="#{msg['sponsor_name_msg']}"
                            styleClass="input">
                            <f:validator validatorId="sponsorValidator" />
                        </p:inputText>

                        <p:outputLabel for="sadd" value="#{msg['sponsoraddress']}:"
                            styleClass="label" />
                        <p:inputText id="sadd" value="#{sponsorBean.s_address}"
                            required="true" requiredMessage="#{msg['Sponsor_address_msg']}"
                            styleClass="input" />

                        <p:outputLabel for="smb" value="#{msg['sponsor_mbno']}:"
                            styleClass="label" />
                        <p:inputText id="smb" value="#{sponsorBean.s_mobile_no}"
                            required="true" requiredMessage="#{msg['sponsor_mbno_msg']}"
                            styleClass="input" />

                        <p:outputLabel for="ss" value="#{msg['sponsor_status']}:" styleClass="label" />
                        <p:inputText id="ss" value="#{sponsorBean.status}" required="true"
                            requiredMessage="#{msg['sponsor_mbno_msg']}" styleClass="input" />

                    </h:panelGrid>
                    <p:commandButton id="submit" value="#{msg['save']}" ajax="false"
                        action="#{sponsorBean.save}" style="margin-bottom:50px;"
                        update="msgs" />

                    <p:commandButton type="reset" value="#{msg['reset']}"
                        style="margin-bottom:50px;margin-left:30px;" ajax="false" />
                </p:panel>
            </h:form>
        </ui:define>
    </ui:composition>
</body>
</html>

2.toppanel在这里我改变语言..

<html xmlns="http://www.w3.org/1999/xhtml"   
        xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
<h:head>

</h:head>
    <body>
        <ui:composition>

<h:form>

  <p:growl id="messages" >

  <p:toolbar style="Font-size:small;"> 

  <p:toolbarGroup align="left"> 
       <h:outputText value="User : " style=" margin-left:15px;"  />  


    <h:outputText  value="#{loginBean.username}">


</h:outputText>



       <p:commandButton value="Logout" action="#{loginBean.doLogout}"  icon="ui-icon-extlink" />



    </p:toolbarGroup>


    <p:toolbarGroup align="right">
     <p:commandButton value="#{loginBean.toggleButton}" action="#{loginBean.goHome}"  icon="ui-icon-home"/>

 <p:inputText id="firstname" value="#{manageEmployee.search}" dir="ltr" styleClass="input"  style="margin-right:15px" />         


    <h:selectOneMenu  
            value="#{manageEmployee.searchFilter}" style="FONT-STYLE: plain; FONT-SIZE:small;margin-right:10px">
             <f:selectItem itemLabel="All" itemValue="All" />  
            <f:selectItem itemLabel="Search by company" itemValue="company" /> 
            <f:selectItem itemLabel="Search by sponsor" itemValue="sponsor" /> 
        </h:selectOneMenu>





      <p:commandButton id="submit" value="Search" ajax="false"
                action="#{manageEmployee.searchRecords}"  update="msgs" style="margin-left:10px" icon="ui-icon-search"  />


     <h:selectOneMenu value="#{localeBean.language}" onchange="submit()" style="margin-left:10px" >
                <f:selectItem itemValue="en" itemLabel="English" />
                <f:selectItem itemValue="ar" itemLabel="Arabic" />


    </h:selectOneMenu>
    </p:toolbarGroup>

  </p:toolbar></p:growl>
</h:form>
        </ui:composition>
    </body>
</html>

3.Local Bean控制器:

import java.util.Locale;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

@ManagedBean
@SessionScoped
public class LocaleBean {

    private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();

    public Locale getLocale() {
        return locale;
    }

    public String getLanguage() {
        return locale.getLanguage();
    }

    public void setLanguage(String language) {
        locale = new Locale(language);
        FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
        FacesContext facesContext = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
        session.setAttribute("user", locale);
//        session.setAttribute("language", language);
    }


    public String save()
    {
        return "homePage";
    }
}

4.语言控制器:

import java.util.Locale;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;
import javax.servlet.http.HttpSession;

@ManagedBean
@SessionScoped
public class LocaleControllerBean {
    public static String dir="";
    private String direction="";

    public String getDirection() {
        return direction;
    }

    public void setDirection(String direction) {
        this.direction = direction;
    }

    public void islang(ComponentSystemEvent event)
    {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
        Locale l=(Locale) session.getAttribute("user");
        if(l.toString().equals("ar"))
        {
//          dir="rtl";
            setDirection("rtl");
        }
        else
        {
            setDirection("ltr");
//          dir="ltr";
        }
        System.out.println("locale"+l);
        facesContext.getViewRoot().setLocale(l);
    }

}
4

1 回答 1

1

RTL 支持是 primefaces 中的新功能。我认为这是不可能的,只是让整个页面看起来像一个镜像而不实际重新创建页面。css 本身可能不会这样做,因此您需要创建一个单独的页面(或一组页面),在更改您的语言环境后您将被重定向到该页面。

可以在此处找到有关 primefaces 中 RTL 支持的更多信息:http ://code.google.com/p/primefaces/issues/detail?id=3890 并且如您所见 - 它是逐个组件的,而不是全局的。

于 2013-07-02T01:18:00.280 回答