【问题标题】:Update datatable in primefaces with update attribute使用更新属性更新 primefaces 中的数据表
【发布时间】:2015-10-22 14:49:02
【问题描述】:

我有一个包含所需数据的表单,我使用此代码来完成它:

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

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

<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 javax.enterprise.context.RequestScoped; import javax.faces.context.FacesContext; import javax.inject.Inject; import javax.inject.Named;

//类

@RequestScoped

@Named(value = "paymentBean") 公共类 PaymentBean 实现可序列化 {

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

}

【问题讨论】:

  • msg 是您的表单 ID 吗?
  • 味精是
  • 那你为什么会有这个? update=":msg :payment_table add_salary_form"
  • 你必须调用更新 lke :form :element

标签: jsf primefaces cdi


【解决方案1】:

你可以尝试几件事

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

【讨论】:

  • 你应该在 :form-id 和 :payment-table 之间留一个空格吗?
  • 不像在 DOM 中找到像 FacesContext.getCurrentInstance().getViewRoot().findComponent("form-home:hiddenOfile").getAttributes().get("value") 这样的元素.如果您放置一个空格,您将更新您的表单,然后更新您的名为“payment-table”的数据表
  • 我尝试了第 1 点,但结果相同!有没有和CDI有关系?和范围?
  • 在 primefaces 中,恰好在数据表的组件 PAGINATOR 中,当我将行数从 5 更改为 10 时,数据表变为空
  • 我没有看到范围,是请求您可以将其更改为查看最小。
猜你喜欢
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 2017-08-17
  • 2015-01-14
  • 2017-01-20
  • 2015-03-04
  • 2014-10-08
  • 2013-09-15
相关资源
最近更新 更多