在<p:datatable>中添加动态行使用<p:commandbutto>和<f:ajax> </f:ajax> </p:commandbutto> </p:datatable>

时间:2014-08-01 13:23:23

标签: ajax jsf primefaces xhtml

在下面的代码命令按钮中不适用于数据表。

        

    <p:dataTable id="invoiceTable" var="ipsDetail"
        value="#{invoiceBean.ipsDetails}" border="1">
        <p:column headerText="Sr. No.">
            <h:inputText id="serialN7umber" value="#{ipsDetail.serialNumber}"
                size="3" />
        </p:column>

        <p:column headerText="Description of Goods">
            <p:inputText value="#{ipsDetail.descriptionOfGoodsOrService}" />
        </p:column>

        <p:column headerText="HSN Code">
            <p:inputText value="#{ipsDetail.hsnCode}" styleClass="Alingment" />
        </p:column>

        <p:column headerText="Quantity">
            <p:inputText value="#{ipsDetail.quantity}" styleClass="Alingment" />
        </p:column>

        <p:column headerText="Rate">
            <p:inputText value="#{ipsDetail.rate}" styleClass="Alingment" />
        </p:column>

        <p:column headerText="Percentage Discount">
            <p:inputText value="hello" rendered="#{ipsDetail.percentDiscount}"
                styleClass="Alingment" />
        </p:column>

        <p:column headerText="Amount">
            <p:inputText value="#{invoiceBean.amount}" styleClass="Alingment" />
        </p:column>

        <f:facet name="footer">
            <p:commandButton value="Add New Row" action="#{invoiceBean.addRow}" update=":form:invoiceTable">
                <!-- <f:ajax execute=":form:invoiceTable" render=":invoiceTable:addColumn" /> -->
            </p:commandButton>
        </f:facet>

    </p:dataTable>

</h:form>

我想在java中使用primefaces命令按钮在inputtext中添加动态行。它工作但重新渲染不可能。

公共类InvoiceBean实现Serializable {

public List getInvoices(){

    InvoiceDao invoiceDao = new InvoiceDao();
    invoices = invoiceDao.getInvoiceData();

    return invoices;
}

public void setInvoices(List<Invoice> invoices) {
    if (invoices != null) {

        this.invoices.add(new Invoice());
    }
}

public void getInvoiceData() {
    InvoiceDao invoiceDao = new InvoiceDao();
    ipsDetail = new InvoiceProductsServicesDetail();
    if ( ipsDetail != null) {

        ipsDetail
                .setDescriptionOfGoodsOrService(descriptionOfGoodsOrService);
        ipsDetail.setHsnCode(hsnCode);
        ipsDetail.setInvoiceId(invoice.getId());
        ipsDetail.setPercentDiscount(percentDiscount);
        ipsDetail.setQuantity(quantity);
        ipsDetail.setRate(rate);
        ipsDetail.setSerialNumber(serialNumber);
        ipsDetail.setServiceTax((float) 12.5);
        ipsDetail.setVat(5);

        System.out.println("InvoiceBean.insertInvoice");
    }

    invoiceDao.insertInvoice(invoice, ipsDetail);

}

public Row addRow() {

    Row row = new Row();
    InputText inputText = new InputText();

    inputText.setSubmittedValue("Hello");
    Column column = new Column();

    row.setParent(inputText);
    column.setHeader(inputText);

    column.setHeaderText("Hardik");

    return row;
}

} 这是使用inputtext

添加行或列的代码

3 个答案:

答案 0 :(得分:0)

您无法从表格内更新表格。您可以执行以下操作:

<p:dataTable id="invoiceTable" var="ipsDetail" value="#{invoiceBean.ipsDetails}" 
    border="1">
  ...
  <f:facet name="footer">
    <p:commandButton value="Add New Row" onclick="updateTable();">
    </p:commandButton>
  </f:facet>
</p:dataTable>
  ...
<p:remoteCommand name="updateTable" update=":form:invoiceTable" 
  actionListener="#{invoiceBean.addRow}" />

答案 1 :(得分:0)

由于您使用的是Primefaces,因此您还可以使用org.primefaces.context.RequestContext对象从ManagedBean本身更新任何组件。

例如:

的facelet:

<h:form id="form1">
    <p:dataTable id="myTab">
       ...
    </p:dataTable>
</h:form>

ManagedBean:

RequestContext reqCtx = Requestcontext.getCurrentInstance();
req.Ctx.update("form1:myTab");

答案 2 :(得分:0)

感谢您的回复和关于我的问题的解决方案,请点击编辑addRow()。

public void addRow() {

    ipsDetail = new InvoiceProductsServicesDetail();

    if (descriptionOfGoodsOrService != null
            && hsnCode != null  && quantity != 0 && rate != 0) {
        ipsDetail.setSerialNumber(serialNumber);
        ipsDetail
                .setDescriptionOfGoodsOrService(descriptionOfGoodsOrService);
        ipsDetail.setHsnCode(hsnCode);
        ipsDetail.setPercentDiscount(percentDiscount);
        ipsDetail.setQuantity(quantity);
        ipsDetail.setRate(rate);

        ipsDetails.add(ipsDetail);
    }

    FacesContext facesContext = FacesContext.getCurrentInstance();
    try {

        DataTable table = (DataTable) facesContext.getViewRoot()
                .findComponent("form:invoiceTable");

        UIComponent uiTable = ComponentUtils.findParentForm(facesContext,
                table);

        final AjaxBehavior behavior = new AjaxBehavior();
        RowEditEvent rowEditEvent = new RowEditEvent(uiTable, behavior,
                table.getRowData());

        rowEditEvent.setPhaseId(PhaseId.UPDATE_MODEL_VALUES);
        table.broadcast(rowEditEvent);

    } catch (AbortProcessingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}