我使用的是primefaces 5.1,jsf 2.2(Mojarra),spring 4.1.6,prettyfaces 2.3.3。 我有一個xhmtl,其中包含一個tabview與多個選項卡和彈簧管理視圖範圍bean(viewBean)。 問題在於頁面的值(view.xhmtl),並顯示第零個選項卡的值。但剩餘選項卡中的其餘數據未顯示.ie,新交易選項卡中的值未顯示。數據沒有顯示在Primefaces選項卡中,由viewcope管理spring bean
當viewBean的newDeals對象變爲靜態時,顯示該值。
我經歷了jsf viewscoped bean - set values for every page(tabs), Using JSF with multiple tabs in one browser,並想知道我從以上鍊接瞭解的內容是否正確。即,我們必須將會話範圍用於bean或者在視圖中具有多個選項卡的頁面。
該項目使用美麗的重定向。
更新
在http://balusc.blogspot.in/2011/09/communication-in-jsf-20.html#ManagedBeanScopes,它被提及
@ViewScoped:在這個範圍豆住,只要你在瀏覽器窗口/標籤相同的JSF視圖交互。它會在HTTP請求中創建,並在您回發到其他視圖後被破壞。
那麼怎麼來的(第一個到最後一個)選項卡中的數據不會在由TabView的一頁(有多個選項卡)加載,而第0個標籤的數據加載?
代碼是初級講座
List.xhmtl
<p:dataScroller value="#{listBean.pdtVOList}" var="pdt">
<p:commandLink value="#{pdt.name}" action="#{viewBean.viewPdtFrmList(pdt.id)}" ></p:commandLink>
</p:dataScroller>
ListBean
@Scope("view")
@Component
public class ListBean implements Serializable {
private List<Product> pdtVOList; //include getters and setters
public void fillPage() {
pdtVOList = ownerService.fillProductList(); //gets all product from db
}
}
個ViewBean是
@Component
@Scope("view")
public class ViewBean implements Serializable {
private static Product pdt = new Product();
private NewDeals newDeals = new NewDeals();
//include getter and setters
public void fillPage() {
//is Empty
}
public void viewPdtFrmList(String pdtIdStr) {
pdt = new Product();
//set pdt values
setPdt(getPdtValuesFromDB(pdtIdStr));
newDeals = pdtRepository.getNewDealsCOmbo();
FacesContext.getCurrentInstance().getExternalContext()
.redirect("/pdt/view");
}
public getPdtValuesFromDB(String pdtIdStr) {
//get values from database
pdt = pdtRepository.getValuesFromDB(Integer.parseInt(pdtIdStr));
}
}
產品型號
private int id;
private String name; //Include getter and setter
pdtView.xhtml
<h:outputText value="#{viewBean.pdt.id}"/>
<h:outputText value="#{viewBean.pdt.name}"/>
<p:tabView id="tabview" style="width:100%;float:right;">
<p:tab id="clientPricing" title=" Pricing">
<h:outputText value="#{viewBean.pdt.price}"/>
</p:tab>
<p:tab title="New Deals">
<h:outputText value="#{viewBean.newDeals.name}"/>
</p:tab>
</p:tabView>
prettyconfig.xml
<url-mapping id="ownerandpetsview">
<pattern value="/pdt/view" />
<view-id value="/WEB-INF/views/pdtView.xhtml" />
</url-mapping>
的web.xml
<filter>
<filter-name>Pretty Filter</filter-name>
<filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Pretty Filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
網絡。XML
<context-param>
<param-name>javax.faces.STATE_SAVING</param-name>
<param-value>true</param-value>
</context-param
因爲它當你按下tab鍵時,它的視圖bean將失去它的狀態,並且實例'newDeals'被再次實例化。 – vels4j
所以你的意思是在tabchange上我應該重新初始化newdeals對象..好嗎? –