0

ユーザーがドロップダウンから言語を選択したときに、同じページを別の言語で表示する必要があるという要件があります。このために、複数の言語で selectOneMenu を使用しています。ユーザーが language(locale) を選択すると、値が 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 に答える