このアプリケーションを幅広く実装するには、フェーズリスナーを使用できます。この例では、使用するロケールは "Language"という名前のsessionScope変数に格納されます。
すべての許可されたロケールを含むXPageにコンボボックスを追加するだけです。
<xp:comboBox id="comboBox1" value="#{sessionScope.Language}">
<xp:selectItem itemLabel="Chinese" itemValue="zh"></xp:selectItem>
<xp:selectItem itemLabel="German" itemValue="de"></xp:selectItem>
<xp:selectItem itemLabel="Turkish" itemValue="tr"></xp:selectItem>
<xp:eventHandler event="onchange" submit="true" refreshMode="complete" />
</xp:comboBox>
次に、あなたはこのように位相リスナーを使用する必要があります。
package ch.hasselba.xpages.jsf.core;
import javax.faces.context.FacesContext;
import javax.faces.application.Application;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.faces.component.UIViewRoot;
import java.util.Locale;
import java.util.Map;
public class LocalizationSetter implements PhaseListener {
private static final long serialVersionUID = -1L;
private static final String scopeVarName = "Language";
private static final String scopeName = "sessionScope";
public void afterPhase(PhaseEvent event) {}
public void beforePhase(PhaseEvent event) {
FacesContext facesContext = event.getFacesContext();
UIViewRoot view = facesContext.getViewRoot();
view.setLocale(getLanguage(facesContext)) ;
}
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
private Locale getLanguage(FacesContext facesContext){
try{
Application app = facesContext.getApplication();
Object obj = app.getVariableResolver().resolveVariable(facesContext, scopeName);
Object lang = ((Map) obj).get(scopeVarName);
if(lang != null){
return new Locale((String) lang);
}
}catch(Exception e){}
return Locale.getDefault();
}
}
あなたは「getLanguag()」メソッドでユーザープロファイルにアクセスするために検索/などを追加することができます。
希望これは スヴェン素晴らしい
に役立ちます。どうもありがとうございました。 –