Primefaces Datatable和InputText元素来创建动态表单

时间:2012-05-05 18:36:28

标签: jsf primefaces

我有一个关于在primefaces数据表中使用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;
    }


}

使用上面的代码时。我想在inputText元素中显示一个字符串项列表,该列表位于数据表中。

addNewOfferRow操作向List添加新元素,数据表更新为客户端。

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

如何使用这些数据表结束inputText元素来创建动态行表单。

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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