@ViewScoped页面打开两次时的奇怪行为

  • 本文关键字:两次 @ViewScoped jsf myfaces
  • 更新时间 :
  • 英文 :


我的bean如下所示:

@ManagedBean(name = "reportDetailsBean")  
@ViewScoped  
public class ReportDetailsBean implements Serializable {  
    // content...  
}

和JSF页面使用这部分代码:

...  
<a4j:queue id="reportQueue" status="globalStatus" />  
<a4j:form id="reportForm#{reportDetailsBean.report.id}" ajaxSingle="true" ajaxSubmit="true" eventsQueue="reportQueue" reRender="reportForm" styleClass="">  
    ...  
    <a4j:outputPanel id="salesItemNameHeader" layout="block" style="cursor: pointer;" rendered="#{reportDetailsBean.model.rowCount gt 0}">  
        <h:outputText value="#{bundle.reportDetails_salesItem}" />  
        <rich:spacer width="4px" />  
        <a4j:support event="onclick" reRender="reportTable" action="#{reportDetailsBean.model['sortTableByColumn']}" status="globalStatus" ajaxSingle="true">  
            <a4j:actionparam name="columnIndex" value="bySalesItemName" assignTo="#{reportDetailsBean.model['currentSortModelItem']}" />  
        </a4j:support>  
    </a4j:outputPanel>  
...

JSF页面处理来自URL的参数id。这个JSF页面的正确地址是localhost/reportDetails.jsp?reportId=37

当我想打开reportDetails.jsp两次-使用不同的参数时,出现问题。

有两种情况。第一个:
1)打开reportDetails.jsp?reportId=1
2)打开reportDetails.jsp?reportId=2
3)从reportDetails.jsp?reportId=2ReportDetailsBean,从reportDetails.jsp?reportId=1ReportDetailsBean的引用发生了变化

第二个:
1)打开reportDetails.jsp?reportId=1
2)点击几次如上所示的链接
3)打开reportDetails.jsp?reportId=2
4)一切正常-每个视图都有自己的ReportDetailsBean实例

有人能解释一下为什么在第一个场景中对backbean实例的引用被改变了吗?

如果您有ViewScoped bean,它们将为一个视图而存在。如果您在浏览器中输入另一个地址或重定向到另一个页面,则会出现另一个视图,以及视图作用域bean的另一个实例。

参见:

  • 视图作用域bean是否存在导航JSF

相关内容

  • 没有找到相关文章

最新更新