我正在开发一个显示datatable
相同的页面,如在primefaces showcase中显示的那样。但它不能像那样工作。当我运行带有一行或两行的页面时它可以工作但是当我运行时服务器超过两行的页面显示错误[如果我将datatable
设置为editable
然后它也无效]。当我将bean设置为session scoped
而{{1}时,问题解决了}}。问题是为什么它不适用于请求或视图范围?
来源:
页面:
request or view
bean:
<p:dataTable var="club" value="#{currentClubItems.clubItems}" id="clubs"
>
<p:ajax event="rowEdit" listener="#{currentClubItems.onEdit}" update=":form:messages"/>
<p:column headerText="Main Category" style="width:15%">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{club.mainCategory}"/>
</f:facet>
<f:facet name="input">
<p:selectOneMenu value="#{club.mainCategory}" editable="true">
<f:selectItems value="#{currentClubItems.categories}"
var="ct"
itemLabel="#{ct}"
itemValue="#{ct}"/>
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<!-- other coloms-->
<p:column style="width:5%">
<p:rowEditor/>
</p:column>
</p:dataTable>
ClubItem:
@ViewScoped
@ManagedBean(name = "currentClubItems")
public class CLMItems implements Serializable {
private List<ClubItem> clubItems;
public CLMItems(){
clubItems=new ArrayList<ClubItem>();
ClubItem clubItem=new ClubItem();
clubItem.setId("1");
clubItem.setMainCategory("category");
clubItem.setSubCategory("sub category");
clubItem.setMerchant("Merchant");
clubItem.setOffer("Content goes here..");
//add more items......
}
//getters and setters
}
错误:
public class ClubItem implements Serializable {
private String id;
private String mainCategory;
private String subCategory;
private String merchant;
private String offer;
//getters and setters
}
答案 0 :(得分:0)
如果我们要向表中添加两行以上,这似乎需要创建会话。如果我在之前或在构造函数中激活会话,那么它正常工作。我不是没有理由但是它发生的情况。
添加
//bean constructor
public CLMItems(){
FacesContext.getCurrentInstance().getExternalContext().getSession( true );
// other stuff
}
解决问题。