0

这就是我想要做的:

    <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 的操作完成,但这并没有做出任何改变。是否有其他 LanguageBean 与 HomeView 关联,还是因为 HomeView 的侦听器总是在 LanguageBean 操作之前运行?我怎样才能使这项工作?有没有标准的解决方案?

4

1 回答 1

2

根据我收集到的评论,该#{home}bean 是请求范围的,并且需要在语言更改后重新构建。在这种情况下,您应该重定向回同一个视图,而不是导航到同一个视图。

public String changeLocaleCode(String language) {
    // ...

    FacesContext context = FacesContext.getCurrentInstance();
    return context.getViewRoot().getViewId() + "?faces-redirect=true";
}

然后你就可以摆脱<f:actionListener>.

于 2013-11-13T09:54:18.907 回答