所以我有以下jsf页面(工作):
<ui:define name="content">
<h:form>
<p:dataTable id="projectList" value="#{studyController.studyList}" var="item">
<p:column headerText="ID" >
<h:outputText value="#{item.id}"/>
</p:column>
<p:column headerText="Name">
<h:outputText value="#{item.name}"/>
</p:column>
<p:column headerText="Action">
<h:commandLink action="#{projectController.openProject(item.id)}" value="Project">
</h:commandLink>
</p:column>
</p:dataTable>
</h:form>
</ui:define>
这是 bean,在链接点击时调用:
@Named
public class ProjectController{
private Integer projectId;
public String openProject(Integer projectId){
// this works, System.out.println shows correct setting
this.projectId = projectId;
// now redirect to correct jsf page via faces-config.xml
return "show_project";
}
// this is called by the jsf page to be shown
public Integer getProjectId(){
// this is null :(
return this.projectId;
}
}
我的 faces-config.xml 类似于:
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>show_project</from-outcome>
<to-view-id>/project.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
一切正常,除了 ProjectController 的 projectId 在调用 openProject 之间丢失 - 调用和调试在控制台中显示正确的 id - 和页面的呈现,页面在其中进行一些链接 #{projectController.getProjectId} -因为这返回null。
在呈现页面之前,如何保留 bean 中的值?我尝试了一些@SessionScope、@RequestScope 和其他东西,但坦率地说,我不了解 JFS 生命周期的完整扩展。
只是为了提供更多信息,我将 JBoss AS 7.2 与 PrimeFaces 3.4.2 一起使用