使用update属性更新primefaces中的数据表

时间:2015-10-22 14:49:03

标签: jsf primefaces cdi

我有一个包含所需数据的表单,我使用此代码执行此操作:

<p: inputText id = "salary" value = "#{paymentBean.payment.salary}" required = "true" requiredMessage = "#{msg ['REQUIRED.SALARY']}" />

在同一页面上有一个数据表,其中包含我通过表单添加的对象(付款)。 添加对象后,我会对datable进行更新,以使用以下代码添加新对象:

<p:commandButton action="#{paymentBean.addNewPayment()}" value="#{msg['BUTTON.ADD_NEW_ACCOUNT']}" update=":msg :payment_table add_salary_form">
    <f:param name="employeeId" value="#{param['employeeId']}" />
</p:commandButton>

我遇到的问题是没有输入数据时我单击按钮更新完成,表格显示为空! 但是,验证消息正确显示为必需数据。

数据表是

<p:dataTable id="payment_table" var="p" value="#{paymentBean.payments}" rows="15" paginator="true"
    paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10,15,20">

    <p:column headerText="#{msg['LABEL.SALARY']}">
        <h:outputText value="#{p.salary}" />
    </p:column>

    <p:column headerText="#{msg['LABEL.DATE_PAYMENT']}">
        <h:outputText value="#{p.paymentDate}">
            <f:convertDateTime pattern="dd/MM/yyyy HH:mm" />
        </h:outputText>
    </p:column>

    <p:column headerText="#{msg['LABEL.PAYMENT']}">
        <h:outputText value="#{p.paid == true ? 'Payé' : 'Non payé'}" />
    </p:column>
</p:dataTable>

我在CDI中使用,因为我的托管bean是这样的: // IMPORT

import javax.enterprise.context.RequestScoped; import javax.faces.context.FacesContext; import javax.inject.Inject; import javax.inject.Named;

// CLASS

@RequestScoped

@Named(value =&#34; paymentBean&#34;) 公共类PaymentBean实现Serializable {

private static final long serialVersionUID = 8709710274424668330L;

final static Logger logger = Logger.getLogger(PaymentBean.class);

List<Payment> payments = new ArrayList<Payment>();

private Payment payment;

@Inject
private IPaymentService paymentService;

public PaymentBean() {
    payment = new Payment();
}


public void addNewPayment() {
    //CODE TO ADD PAYMENT
}

//GETTERS AND SETTERS

}

1 个答案:

答案 0 :(得分:0)

你可以尝试几件事

1.-确保将此数据表放入表格标签中 2.-在更新中使用":"时,此均值为绝对值,正确的命令为update=":form-id:payment_table"
3.-我建议你只在id中使用 - 而不是 _ ,因为primefaces使用jquery,在某些情况下,某些命令可能会因为使用jquery搜索primefaces而失败。此更新类似于update=":form-id:payment-table"
4.-创建一个包装器并更新按钮中的包装器,完整的解决方案将是:

<h:panelGrid id="grid-payment-table">
     <p:dataTable id="payment_table"
...
</h:panelGrid>

5.-将范围更改为@ViewScoped