嗨,我对primefaces
很新。我尝试了以下功能。
我向primefaces
数据表添加一个按钮column
。
根据button
我向相同的数据添加新行table
。
为此我使用以下code
。
<p:dataTable id="dt" var="pmr" value="#{globalMaster.vendorContactsList}"
style="width:900px;">
<p:column headerText="Organisation">
<h:outputText value="#{pmr.contactSno}" />
</p:column>
<p:column headerText="Program">
<h:outputText value="#{pmr.location}" />
</p:column>
<p:column headerText="Action" >
<p:commandButton value="Add New" action="#{globalMaster.getVendorContactsList}" />
</p:column>
</p:dataTable>
public List<VendorContactDetails> getVendorContactsList(){
try{
VendorContactDetails veneContactDetails=new VendorContactDetails();
vendorConList.add(veneContactDetails);
}catch(Exception e){
e.printStackTrace();
}return vendorConList;
}
现在问题是;
我的视图页面显示单行显示。
当我点击添加新按钮时,我的视图页面显示3行而不是第2行。
我在调试模式中找到了一些我的list方法调用no.of times(i.e no.of properties in my modal class i.e VendorContactDetails)
我将bean范围会话更改为查看范围。但没有用。
我的代码中是否有任何错误。请指导我
答案 0 :(得分:0)
首先,视图范围是正确的,但是;
getVendorContactsList()
应该只在需要时初始化列表,并将其返回。
public List<VendorContactDetails> getVendorContactsList(){
if (vendorConList == null)
{
vendorConList = new ArrayList<VendorContactDetails>();
}
return vendorConList;
}
然后,应该有一个单独的方法将项目添加到列表中。
public void addVendorContactToList(){
getVendorContactsList().add(new VendorContactDetails());
}
最后,添加新项目的按钮不应该在表格列中。它不是与现有项目/行相关的操作。
<p:commandButton value="Add New" process="@this" update="dt"
action="#{globalMaster.addVendorContactToList}"/>
如果您计划更新或删除列表中的项目,那么这些按钮将位于表格列中。