2012-05-05 75 views
3

我有一个关于在primefaces数据表中使用inputText元素的问题。Primefaces Datatable和InputText元素来创建动态表单

XHTML是像下面

<h:form > 
       <h:panelGrid columns="2"> 
        <p:commandButton action="#{offerController.addNewOfferRow}" update="panel1" id="iconOnly1" 
      icon="ui-icon-circle-plus" value="Yeni Satır" title="Icon Add" style="width:220px;" /> 


       </h:panelGrid> 
       <p:dataTable id="panel1" var="offer" value="#{offerController.offerIds}" style="align: center;"> 
        <p:column id="modelHeader" style=" margin-left: auto; margin-right: auto; width:70%;" > 
         <f:facet name="header"> 
          Eklenecek Offerlar 
         </f:facet> 

         <p:inputText id="addOfferId" value="#{offer}" style=" margin-left: auto; margin-right: auto; width:70%;" /> 

        </p:column> 


       </p:dataTable> 

而且我的Java bean是象下面这样:

@ManagedBean 
@ViewScoped 


public class OfferController implements Serializable{ 

    /** 
    * 
    */ 

    private static final long serialVersionUID = -1552493989687233258L; 
    private static final int defaultNumberOfRows = 6; 
    private List<String> offerIds = new LinkedList<String>(); 


    public OfferController() { 
     super(); 
    for(int i=0;i<defaultNumberOfRows;i++){ 
     offerIds.add(""); 
     } 

    } 

    public void addOffers(){ 
     // do some op. 
    } 

    public void addNewOfferRow(){ 
     offerIds.add(""); 
    } 

    public getOfferIds(){ 
     return offerIds; 
    } 

    public setOfferIds(List<String> offerIds){ 
      this.offerIds = offerIds; 
    } 


} 

当使用代码above.I要显示的字符串inputText的物品清单元素在数据表中。

并addNewOfferRow操作添加新元素到列表和datatable更新客户端。

但提交表单后,所有inputText元素都不存储用户输入的值。

我该如何使用这些数据表端inputText元素来创建动态行窗体。

谢谢。

+0

您是否检查您的bean是否在提交时被重新创建?在构造器中设置一个断点来验证它。 –

回答

0

您正在使用不允许inputText元素设置列表项上的值的字符串(不可变类型)列表。

使用包含String的包装类作为列表项。

<p:dataTable var="item" value="#{listBean.list}"> 
    <p:column> 
     <p:inputText value="#{item.name}" /> 
    </p:column> 
</p:dataTable>