Dziwne zachowanie beana z @ViewScoped

0

Witam,

mam beana, które schemat wygląda jak poniżej:

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

oraz strone JSF, której fragment kodu to:

...  
<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>  
...

strona JSF przechwytuje parametr reportId z URL. Przykładowy poprawny adres wywołania to: localhost/project/reportDetails.jsp?reportId=37.

Problem pojawia się, gdy chcę otworzyć tą storne w dwóch oknach z różnymi parametrami.

Obserwuję u mnie dwa przypadki. Pierwszy:

  1. Otwieram reportDetails.jsp?reportId=1
  2. Otwieram reportDetails.jsp?reportId=2
  3. Referencja do instancji ReportDetailsBean dla reportDetails.jsp?reportId=1 zostaje podmieniona na referencje do instancji ReportDetailsBean dla reportDetails.jsp?reportId=2. W związku z tym tracę możliwość wykonywania kolejnych działań na stronie reportDetails.jsp?reportId=1.

Drugi:

  1. Otwieram reportDetails.jsp?reportId=1
  2. Wykonuję kilka operacji na otwartej stornie klikając na linki takie jak zamieszczone powyżej
  3. Otwieram reportDetails.jsp?reportId=2
  4. Wszystko jest ok. Każdy widok ma swoją instancje ReportDetailsBean i na obu mogę wykonywać dalsze operacje.

Według mnie działanie w drugim przypadku jest prawidłowe dla @ViewScoped - każdy widok ma swojego beana.

Czy ktoś mógłby mi wytłumaczyć dlaczego w pierwszym przypadku referencja do backbeana dla pierwszej strony jest zmieniana?

pozdrawiam,
Antek

0

Nie wiem jak wyglada nawigacja, ale ViewBean zostaje ten sam tylko jak renderowany jest ten sam widok, poprzez zwracanie nulla w akcji. Podejrzewam ze u ciebie przejscie z id=1 do id=2 wykonywane jest jakos tak ze podajesz akcje i jakies parametry, czyli renderowany jest nowy widok, nawet jak nowa strona jest ta sama co stara.

1 użytkowników online, w tym zalogowanych: 0, gości: 1