Я использую перформалы 5.1, jsf 2.2 (Mojarra), весна 4.1.6, шрифты 2.3.3. У меня есть xhmtl, который содержит табуляцию с более чем одной вкладкой и веером области видимости, управляемой весной (viewBean). Проблема - это значения страницы (view.xhmtl), а на дисплее отображается нулевая вкладка. но остальные данные в остальных вкладках не отображаются., значение в Новые предложения вкладка не отображается.Данные не отображаются на вкладке «Поверхности», управляемой viewcope spring bean
Когда объект newDeals viewBean сделан статическим, значение отображается.
Я прошел через jsf viewscoped bean - set values for every page(tabs), Using JSF with multiple tabs in one browser, и хотел бы знать, правильно ли я понял из приведенных выше ссылок. т.е. мы должны использовать область сеанса для компонента или страницы с несколькими вкладками в представлении xhtml ??
Проект использует грани для перенаправления.
Update
В http://balusc.blogspot.in/2011/09/communication-in-jsf-20.html#ManagedBeanScopes упоминается, что
@ViewScoped: фасоль в этой области живет до тех пор, как вы взаимодействуете с тем же JSF представления в/вкладке окна браузера. Он создается по запросу HTTP и уничтожается после пересылки на другое представление.
Так как же данные вкладки (от 1 до последнего) не загружаются на страницу, состоящую из табуляции (с несколькими вкладками), когда загружаются данные 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
т.к. s bean, он теряет свое состояние, когда вы нажимаете вкладку, и экземпляр «newDeals» создается снова. – vels4j
, поэтому вы имеете в виду, что на tabchange я должен повторно инициализировать объект newdeals..right? –