java - 单击命令按钮时获取 NULL 值

标签 java mysql primefaces managed-bean

当单击commandButton时,manageBean中的ipsDetail值全部为NULL。在同一页面中,我得到了其他表数据,但遵循 primefaces 数据表无法正常工作。

XHTML 文件:

<p:dataTable id="invoiceTable" var="ipsDetail"
        value="#{invoiceBean.ipsDetails}" border="1" editable="true">


        <p:column headerText="Sr. No.">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{ipsDetail.serialNumber}" />
                </f:facet>
                <f:facet name="input">
                    <h:inputText value="#{ipsDetail.serialNumber}" size="3" />
                </f:facet>
            </p:cellEditor>
        </p:column>

        <p:column headerText="Description of Goods">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{ipsDetail.descriptionOfGoodsOrService}" />
                </f:facet>
                <f:facet name="input">
                    <h:inputTextarea value="#{ipsDetail.descriptionOfGoodsOrService}" />
                </f:facet>
            </p:cellEditor>
        </p:column>

        <p:column headerText="HSN Code">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{ipsDetail.hsnCode}" />
                </f:facet>
                <f:facet name="input">
                    <h:inputText value="#{ipsDetail.hsnCode}" />
                </f:facet>
            </p:cellEditor>
        </p:column>

        <p:column headerText="Quantity">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{ipsDetail.quantity}" />
                </f:facet>
                <f:facet name="input">
                    <h:inputText value="#{ipsDetail.quantity}" size="3" />
                </f:facet>
            </p:cellEditor>
        </p:column>

        <p:column headerText="Rate">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{ipsDetail.rate}" />
                </f:facet>
                <f:facet name="input">
                    <h:inputText value="#{ipsDetail.rate}" size="3" />
                </f:facet>
            </p:cellEditor>
        </p:column>

        <p:column headerText="Percentage Discount">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{ipsDetail.percentDiscount}" />
                </f:facet>
                <f:facet name="input">
                    <h:inputText value="#{ipsDetail.percentDiscount}" size="2" />
                </f:facet>
            </p:cellEditor>
        </p:column>

        <p:column headerText="Amount">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{invoiceBean.amount}" />
                </f:facet>
                <f:facet name="input">
                    <h:inputText value="#{invoiceBean.amount}" />
                </f:facet>
            </p:cellEditor>
        </p:column>

        <p:column>
            <p:rowEditor />
        </p:column>


        <f:facet name="footer">
            <p:commandButton value="Add New Row"
                actionListener="#{invoiceBean.addRow}" update="invoiceTable"
                process="@this invoiceTable"
                oncomplete="jQuery('.ui-datatable-data tr').last().find('span.ui-icon-pencil').each(function(){jQuery(this).click()});" />
        </f:facet>

    </p:dataTable>
 <p:commandButton value="Add Invoice"
        action="#{invoiceBean.getInvoiceData()}" ajax="false" />

管理Bean:invoiceBean,它存储所有ipsDetail。

@ManagedBean(name = "invoiceBean", eager = true)
@ViewScoped
public class InvoiceBean implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private String invoiceNumber;
private Date date;
private String deliveryNote;
private String modeOfPayment;
private int supplierReference;
private String otherReference;
private String buyerName;
private Date dispatchDocumentDate;
private String dispatchThrough;
private String destination;
private String email;
private String termsOfdelivery;
private String buyerOrderNumber;
private int amount;

private int serialNumber;
private String descriptionOfGoodsOrService;
private String hsnCode;
private int quantity;
private int rate;
private int percentDiscount;
private float vat;
private float serviceTax;

private int total;

private List<Invoice> invoices;
private List<InvoiceProductsServicesDetail> ipsDetails;
private Invoice invoice;
private InvoiceProductsServicesDetail ipsDetail;


public List<Invoice> 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 saveInvoiceData() {
    InvoiceDao invoiceDao = new InvoiceDao();
    invoice = new Invoice();
    ipsDetail = new InvoiceProductsServicesDetail();
    try {
        if (invoice != null && ipsDetail != null) {
            invoice.setInvoiceNumber(getInvoiceNumber());
            invoice.setDate(date);
            invoice.setDeliveryNote(deliveryNote);
            invoice.setModeOfPayment(modeOfPayment);
            invoice.setSupplierReference(supplierReference);
            invoice.setOtherReference(otherReference);
            invoice.setBuyerName(buyerName);
            invoice.setBuyerOrderNumber(buyerOrderNumber);
            invoice.setOrderDate(new Date());
            invoice.setDispatchDocumentDate(dispatchDocumentDate);
            invoice.setDispatchThrough(dispatchThrough);
            invoice.setDestination(destination);
            invoice.setTermsOfdelivery(termsOfdelivery);
            invoice.setEmail(email);
            invoice.setTotal(total);
            // invoiceDao.insertInvoice(invoice);

            System.out.println(getAmount());

            ipsDetail
                    .setDescriptionOfGoodsOrService(getDescriptionOfGoodsOrService());
            ipsDetail.setHsnCode(hsnCode);
            ipsDetail.setInvoiceId(invoice.getId());
            ipsDetail.setPercentDiscount(percentDiscount);
            ipsDetail.setQuantity(quantity);
            ipsDetail.setRate(rate);
            ipsDetail.setSerialNumber(serialNumber);
            ipsDetail.setServiceTax((float) 12.36);
            ipsDetail.setVat(5);
            invoiceDao.insertIpsDetail(ipsDetail);

            System.out.println("InvoiceBean.insertInvoice");
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}

public void addRow(){

    ipsDetail = new InvoiceProductsServicesDetail();
    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();
    }
}

public InvoiceBean() {
    ipsDetails = new ArrayList<InvoiceProductsServicesDetail>();
}


public InvoiceProductsServicesDetail getIpsDetail() {
    return ipsDetail;
}

public void setIpsDetail(InvoiceProductsServicesDetail ipsDetail) {
    this.ipsDetail = ipsDetail;
}

public void setIpsDetails(List<InvoiceProductsServicesDetail> ipsDetails) {
    if(ipsDetails != null){
        this.ipsDetails.addAll(ipsDetails);
    }

}

public List<InvoiceProductsServicesDetail> getIpsDetails() {
    return ipsDetails;
    //return new InvoiceProductsServicesDetailDao().getIpsData() ;
}

public String getInvoiceNumber() {
    return invoiceNumber;
}

public void setInvoiceNumber(String invoiceNumber) {
    this.invoiceNumber = invoiceNumber;
}

public Date getDate() {
    return date;
}

public void setDate(Date date) {
    this.date = date;
}

public String getDeliveryNote() {
    return deliveryNote;
}

public void setDeliveryNote(String deliveryNote) {
    this.deliveryNote = deliveryNote;
}

public String getModeOfPayment() {
    return modeOfPayment;
}

public void setModeOfPayment(String modeOfPayment) {
    this.modeOfPayment = modeOfPayment;
}

public int getSupplierReference() {
    return supplierReference;
}

public void setSupplierReference(int supplierReference) {
    this.supplierReference = supplierReference;
}

public String getOtherReference() {
    return otherReference;
}

public void setOtherReference(String otherReference) {
    this.otherReference = otherReference;
}

public String getBuyerName() {
    return buyerName;
}

public void setBuyerName(String buyerName) {
    this.buyerName = buyerName;
}

public Date getDispatchDocumentDate() {
    return dispatchDocumentDate;
}

public void setDispatchDocumentDate(Date dispatchDocumentDate) {
    this.dispatchDocumentDate = dispatchDocumentDate;
}

public String getDispatchThrough() {
    return dispatchThrough;
}

public void setDispatchThrough(String dispatchThrough) {
    this.dispatchThrough = dispatchThrough;
}

public String getDestination() {
    return destination;
}

public void setDestination(String destination) {
    this.destination = destination;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getTermsOfdelivery() {
    return termsOfdelivery;
}

public void setTermsOfdelivery(String termsOfdelivery) {
    this.termsOfdelivery = termsOfdelivery;
}

public int getSerialNumber() {
    return serialNumber;
}

public void setSerialNumber(int serialNumber) {
    this.serialNumber = serialNumber;
}

public String getDescriptionOfGoodsOrService() {
    return descriptionOfGoodsOrService;
}

public void setDescriptionOfGoodsOrService(
        String descriptionOfGoodsOrService) {
    this.descriptionOfGoodsOrService = descriptionOfGoodsOrService;
}

public String getHsnCode() {
    return hsnCode;
}

public void setHsnCode(String hsnCode) {
    this.hsnCode = hsnCode;
}

public int getQuantity() {
    return quantity;
}

public void setQuantity(int quantity) {
    this.quantity = quantity;
}

public int getRate() {
    return rate;
}

public void setRate(int rate) {
    this.rate = rate;
}

public int getPercentDiscount() {
    return percentDiscount;
}

public void setPercentDiscount(int percentDiscount) {
    this.percentDiscount = percentDiscount;
}

public float getVat() {
    return vat;
}

public void setVat(float vat) {
    this.vat = vat;
}

public float getServiceTax() {
    return serviceTax;
}

public void setServiceTax(float serviceTax) {
    this.serviceTax = serviceTax;
}

public String getBuyerOrderNumber() {
    return buyerOrderNumber;
}

public void setBuyerOrderNumber(String buyerOrderNumber) {
    this.buyerOrderNumber = buyerOrderNumber;
}

public Invoice getInvoice() {
    return invoice;
}

public void setInvoice(Invoice invoice) {
    this.invoice = invoice;
}

public int getAmount() {
    return amount;
}

public void setAmount(int amount) {
    this.amount = amount;
}

public int getTotal() {
    return total;
}

public void setTotal(int total) {
    this.total = total;
}
}

我想将所有数据存储在mysql数据库表中。

最佳答案

您没有在发票 bean 中设置值。

通过单击“添加”添加新的详细信息后,您将把值放入这个新对象中。但随后您将在 saveInvoice bean 中保存一个新的详细信息,并尝试从该 bean 的属性中获取值。 (未设置,因此为 NULL)这将不起作用,因为属性未映射到表。

您还在代码中创建了不必要的工作,并使代码变得过于复杂。如果您更改 bean 以从 addRow 方法获取新实例的详细信息或更新单元格编辑器中的属性,它应该可以工作。您可能还需要简化一些其他代码。

注意:我实际上建议您从头开始。使用迭代方法解决问题,从 addRow 开始,然后保存。调试是你的 friend 。

更新 xhtml 输出以映射到属性。例如:

<f:facet name="input">
                    <h:inputText value="#{invoiceBean.($ipsDetail)}" size="3" />
                </f:facet>

另外:在页脚中您引用了一个actionListener。将其更改为“操作”并删除该过程。让 addRow 方法向详细信息列表添加一个空行。绘制此详细信息。

<p:commandButton value="Add New Row" oncomplete="clickFirstRow()"
                action="#{invoiceBean.addRow}" update="invoiceTable"
                 />

您的保存按钮还可以通过单击要保存的所有行来处理可编辑行的应用和保存。

<p:commandButton value="Save Invoice" ajax="false"
    onclick="tickAllRows()" action="#{invoiceBean.saveInvoiceData}" />

关于java - 单击命令按钮时获取 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25131303/

相关文章:

java - 我们可以在 Java 程序中编写 Scala 代码吗?

java - 使用 Mockito 时实例变量保持为 null

java - 需要有关 Java 回调和匿名类的帮助

mysql - SQL 没有返回列值为 NULL 的行

jsf - 在 Primefaces 表行选择的基础上动态启用/禁用命令按钮

java - org.springframework.beans.factory.UnsatisfiedDependencyException : Error creating bean with name 'demoRestController'

javascript - 如何在ajax中获取数组值

mysql - .find( :all ) with specific conditions return in Ruby on Rails? 是什么

jsf - p :poll not starting immediately

jsf - 如何重置 PrimeFaces 动态列的排序?