0

私は以下のような豆を持っています:

@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 を 2 回開く必要がある場合に問題が発生します - 異なるパラメーターを使用します。

2 つのシナリオがあります。最初のもの:
1) 開くreportDetails.jsp?reportId=1
2) 開くreportDetails.jsp?reportId=2
3) からのReportDetailsBeanインスタンスへの参照は、からのインスタンスreportDetails.jsp?reportId=1への参照によって変更されましたReportDetailsBeanreportDetails.jsp?reportId=2

2 つ目:
1) 開くreportDetails.jsp?reportId=1
2) 上記のようなリンクを数回クリックします
3) 開くreportDetails.jsp?reportId=2
4) すべて問題ありません - 各ビューには独自のインスタンスがありますReportDetailsBean

最初のシナリオで backbean の isntance への参照が変更された理由を説明してもらえますか?

4

1 に答える 1

0

あなたがViewScoped豆を持っているなら、彼らは1つのビューのために生きます。ブラウザに別のアドレスを入力するか、別のページにリダイレクトすると、別のビューと、ビュースコープのBeanの別のインスタンスがあります。

参照:

于 2013-03-12T10:09:12.890 に答える