我的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的param id。这个JSF页面的正确地址例如是localhost/reportDetails.jsp?reportId=37
。
当我想要打开reportDetails.jsp两次时会出现问题 - 有不同的参数。
有两种情况。第一个:
1)打开reportDetails.jsp?reportId=1
2)打开reportDetails.jsp?reportId=2
3)来自ReportDetailsBean
的{{1}}实例的引用已更改为reportDetails.jsp?reportId=1
来自ReportDetailsBean
的实例
第二个:
1)打开reportDetails.jsp?reportId=2
2)在如上所示的链接上单击几次
3)打开reportDetails.jsp?reportId=1
4)一切都很好 - 每个视图都有自己的reportDetails.jsp?reportId=2
有人可以解释一下为什么在第一个场景中引用backbean的isntance会改变吗?
答案 0 :(得分:0)
如果你有ViewScoped
bean,他们将为一个视图生活。如果您在浏览器中输入另一个地址或重定向到另一个页面,则会有另一个视图,以及您的视图范围bean的另一个实例。
另见: