这就是我想要做的事情:
<h:commandButton image="resources/frontend/img/persion.PNG" styleClass="persion" action="#{language.changeLocaleCode('fa')}">
<f:actionListener binding="#{home}" />
</h:commandButton>
首先更改LanguageBean
中的语言,然后回调home.xhtml的bean以根据新语言加载数据。
@ManagedProperty(value = "#{language}")
private LanguageBean language;
public HomeView() implements ActionListener{
}
@PostConstruct
public void init() {
String lang = language.getReadableLang();
.
. // do DAO stuff whil lang
.
public void processAction(ActionEvent arg0) throws AbortProcessingException {
init();
}
首先我想如果我在processAction中放入一个Thread.sleep()命令,我可以推迟监听器的动作,直到commandButton的动作完成但没有做任何改变。还有一个与HomeView相关联的LanguageBean,还是因为HomeView的监听器总是在LanguageBean动作之前运行?我怎么能做这个工作?有没有标准的解决方案?
答案 0 :(得分:2)
根据我收集的评论,#{home}
bean是请求范围的,需要在语言更改时重建。在这种情况下,您应该重定向回相同的视图,而不是导航到同一视图。
public String changeLocaleCode(String language) {
// ...
FacesContext context = FacesContext.getCurrentInstance();
return context.getViewRoot().getViewId() + "?faces-redirect=true";
}
然后你就可以摆脱<f:actionListener>
。