JSF 2动态ui:包括读取旧bean字段值

时间:2011-09-14 20:18:08

标签: jsf-2

我一直在挠挠脑袋,想着为什么这不再有用。我有一个动态<ui:include src="subpages/#{bean.subpage}.xhtml>的页面,以及一些应该设置子页面bean字段值的commandLinks。 bean是一个会话范围的Spring bean。一切都很好。但是当点击commandLink时,我发现<ui:include>正在读取子页面字段的当前值,然后我的操作(设置字段的新值)被调用。鉴于我目前的代码如下:

<h:form id="navform">
    <h:panelGrid columns="1">
        <h:commandLink value="Page 2" action="#{navigateTestBean.navigateToSection('page2')}"/>
        <h:commandLink value="Page 3" action="#{navigateTestBean.navigateToSection('page3')}"/>
    </h:panelGrid>
</h:form>
<h:panelGroup id="mainArea">
    <ui:include src="subpages/#{navigateTestBean.sectionName}.xhtml"/>
</h:panelGroup>

@Service
@Scope("session")
public class NavigateTestBean {
    private String sectionName;

    @PostConstruct
    private void doSetup() {
        sectionName = "general";
    }

    public String navigateToSection(String sectionName) {
        this.sectionName = sectionName;
        return null;
    }

    public String getSectionName() {
        return sectionName;
    }

    public void setSectionName(String sectionName) {
        this.sectionName = sectionName;
    }
}

我第一次点击链接,说第2页,调用getSectionName(),读取&#34; general&#34;,然后调用navigateToSection()。不再调用getSectionName(),因此ui:include最终会再次呈现常规子页面。下次我单击一个commandLink时,无论是相同还是另一个,我最终会得到page2(在它之前设置为新值的sectionName的当前值)。

我还尝试在<f:ajax render=":mainArea">中包装commandLinks,如BalusC在其他地方的其他答案中所述,行为没有变化。

我错过了什么愚蠢的小事?使用EL 2.2解析器,Mojarra 2.0.2和RichFaces在Tomcat 6.0.33上运行4.谢谢!

1 个答案:

答案 0 :(得分:1)

看起来是Mojarra 2.0.2中的一个错误。升级到2.1.3,Maven的最新版本,情况得到了解决。