我一直在挠挠脑袋,想着为什么这不再有用。我有一个动态<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.谢谢!
答案 0 :(得分:1)
看起来是Mojarra 2.0.2中的一个错误。升级到2.1.3,Maven的最新版本,情况得到了解决。