0

我有一个要求,当用户从下拉列表中选择一种语言时,我需要以不同的语言显示同一页面。为此,我使用了具有多种语言的 selectOneMenu。当用户选择一种语言(区域设置)时,该值应附加到 url。

我使用了下面的代码,但它用语言环境替换了 url 中已经存在的参数。有什么方法可以在不干扰已经存在的参数的情况下附加语言环境参数。

FacesContext ctx = FacesContext.getCurrentInstance();
String contxRoot = ctx.getExternalContext().getRequestContextPath();
String viewId = ctx.getViewRoot().getViewId();
String URL=viewId+"?language="+this.selectedLaguage;

try {
    FacesContext.getCurrentInstance().getExternalContext().redirect(contxRoot+URL);
} catch (IOException e) {
    e.printStackTrace();
}

任何帮助,将不胜感激。

4

2 回答 2

0

这听起来像是存储在 @SessionScoped bean 中的好选择。在 bean 中设置语言,它可以被用户请求的所有页面使用(当然,在这个会话的过程中)。

例如,如果用户想要链接到特定语言的 URL,则可以选择拦截请求并从 url 设置语言并适当重定向的自定义过滤器。你是否真的想允许这取决于你......

于 2013-07-29T11:23:53.467 回答
0

这段代码不是美女,但你可以试试

FacesContext ctx = FacesContext.getCurrentInstance();
String contxRoot = ctx.getExternalContext().getRequestContextPath();
String initialUri = ((HttpServletRequest) ctx.getExternalContext().getRequest()).getRequestURI();
String languageParameter = "?language="+this.selectedLaguage;

try {
FacesContext.getCurrentInstance().getExternalContext().redirect(contxRoot+initialUri+languageParameter);
} catch (IOException e) {
e.printStackTrace();
}
于 2013-07-27T14:09:47.547 回答