2011-01-20 62 views
5

Tôi đã thực hiện quốc tế hóa vào ứng dụng JSF của mình như được mô tả here.JSF setLocale không hoạt động phù hợp

Nhưng tôi gặp sự cố: Khi tôi thay đổi ngôn ngữ, tất cả văn bản trên trang của tôi thay đổi. Nhưng sau đó nếu tôi nhấp vào liên kết điều hướng để đến trang khác, miền địa phương sẽ quay trở lại ngôn ngữ chuẩn!

Tôi nghĩ rằng tôi nhớ điều gì đó ở đây. Vì vậy, tôi cung cấp mã của tôi dưới đây và hy vọng bạn có thể giúp:

LocaleBean.java:

@ManagedBean(name="locale") 
    @SessionScoped 
    public class LocaleBean { 

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

    public Locale getLocale() { 
     return locale; 
    } 

    public void setLanguage(String language) { 
     locale = new Locale(language); 
     FacesContext.getCurrentInstance().getViewRoot().setLocale(locale); 
    } 

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

JSF Phần (phần của nó mẫu của tôi):

<h:outputText value=" #{text['common.language']}: " /> 
     <h:selectOneMenu value="#{locale.language}" onchange="submit()"> 
      <f:selectItem itemValue="de" itemLabel="Deutsch" /> 
      <f:selectItem itemValue="en" itemLabel="English" /> 
     </h:selectOneMenu> 

khuôn mặt -config.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
    version="2.0"> 
    <application> 
      <locale-config> 
       <default-locale>de</default-locale> 
       <supported-locale>en</supported-locale> 
      </locale-config> 
     <resource-bundle> 
     <base-name>org.dhbw.stg.wwi2008c.mopro.ui.text</base-name> 
     <var>text</var> 
     </resource-bundle> 
    </application> 
</faces-config> 

Tôi sau đó Text.java từ hướng dẫn và chỉ thay đổi gói-đường dẫn.

đây thư mục của tôi:

Nếu một cái gì đó quan trọng là mất tích yêu cầu nó vui lòng.

Trả lời

9

FacesContext là ví dụ về phạm vi yêu cầu. do đó giá trị của bạn sẽ chỉ được đặt cho yêu cầu cụ thể đó.

thêm vào xhtml

<f:view locale="#{locale.locale}"> 

OR:

Đăng ký một Handler xem
trong faces-config.xml

<application> 
      ... 
     <view-handler>com.yourcompany.MyLocaleViewHandler</view-handler> 

public class MyLocaleViewHandler extends ViewHandler { 

    private final ViewHandler base; 


    @Override 
    public Locale calculateLocale(FacesContext context) { 
     //fetch the session scoped bean and return the 
     LocaleBean bean = (LocaleBean) context.getExternalContext().getRequest().getSession().getAttribute("locale");//this line is not tested. 
     return locale; 
    } 
     //other stuff.. 


    } 
Các vấn đề liên quan