我有一个组合框,用户可以选择一种可用的语言.该应用程序包含每种语言的属性文件.在页面的资源部分中,根据用户配置文档中的语言标记(DE,EN ...)计算资源包.
有没有简单的方法根据组合框的值更改onChange事件中的语言?我想到了context.setProperty(???).有什么建议吗?
要实现此应用程序范围,您可以使用阶段侦听器.在此示例中,要使用的语言环境存储在名为"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>
Run Code Online (Sandbox Code Playgroud)
然后你必须使用像这样的阶段监听器:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以添加查找/等以访问"getLanguag()"方法中的用户配置文件.
希望这有助于斯文
| 归档时间: |
|
| 查看次数: |
1045 次 |
| 最近记录: |