이 응용 프로그램을 구현하려면 위상 수신기를 사용할 수 있습니다. 이 예제에서 사용할 로케일은 "Language"라는 sessionScope 변수에 저장됩니다.
허용 된 모든 로케일을 포함하는 XPage에 콤보 상자를 추가하십시오. 당신은 등을 조회 /를 추가 할 수 있습니다
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()"방식으로 사용자 프로파일에 액세스하려면 :
<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>
그런 다음이 같은 위상 수신기를 사용해야합니다.
희망이 스벤
듯하는 데 도움이됩니다. 고맙습니다. –