做了一个JSF应用,有中、英两个Message Bundle,用IE进行测试,能根据IE的语言首选项自动选择正确的Message Bundle,但当自动选择了中文的Message Bundle后(页面是中文的),提交回来的中文信息还是乱码。当自动选择了中文的Message Bundle显示页面时,IE自动选择的编码却是“西欧(ISO)”。

解决方案 »

  1.   

    我用的是WSAD,可以把项目中的"文体文件的缺省编码"换成GB18130、UTF-16等试试
    也可以编个方法:
    public class ChangeLocaleBean {
    public String chineseAction(){
    FacesContext context = FacesContext.getCurrentInstance();
    context.getViewRoot().setLocale(Locale.SIMPLIFIED_CHINESE);
    System.out.println("===> chinese");
    return null;

    }

    }
    public String englishAction(){
    FacesContext context=FacesContext.getCurrentInstance();
    context.getViewRoot().setLocale(Locale.ENGLISH);
    System.out.println("===> english");
    return null;
    }
    }
    通过两个Button可以对整个项目中的OutputText进行中英切换.关于在IE中submit数据到数据库然后回显到IE出现中文出现乱码的问题我也没有解决,希望有高手指点!
      

  2.   

    方法合并优化代码:
    public class ChangeLocaleBean {
    public String chineseAction() {
    event(Locale.SIMPLIFIED_CHINESE);
    return null; }
    }
    public String englishAction() {
    event(Locale.ENGLISH);
    return null;
    }
    public void event(Locale e) {
    Locale.setDefault(e);
    FacesContext context = FacesContext.getCurrentInstance();
    context.getViewRoot().setLocale(e);
    }

    }
      

  3.   

    自己解决了。
    可能的原因是:JSF能正确选择Message Bundle,但不能正确设置响应中的charset,不管选哪个Message bundle,都把响应中的charset设成“西欧(ISO)”对应的字符集,导致IE或服务器端不正确地处理提交的中文信息。
    解决方法:设置响应的charset=UTF-8。