使用更新属性更新 primefaces 中的数据表
Update datatable in primefaces with update attribute
我有一个包含所需数据的表单,我使用以下代码来完成:
<p: inputText id = "salary" value = "#{paymentBean.payment.salary}" required = "true" requiredMessage = "#{msg ['REQUIRED.SALARY']}" />
在同一页面上有一个数据table,其中包含我通过表单添加的对象(付款)。
添加对象后,我对 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>
我遇到的问题是未输入数据时单击按钮更新完成,table 显示为空!
但是,验证消息正确显示,因为存在强制性数据。
数据table是
<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;
//CLASS
@RequestScoped
@Named(值="paymentBean")
public class 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.- 确保将此数据表放入表单标记中。
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
我有一个包含所需数据的表单,我使用以下代码来完成:
<p: inputText id = "salary" value = "#{paymentBean.payment.salary}" required = "true" requiredMessage = "#{msg ['REQUIRED.SALARY']}" />
在同一页面上有一个数据table,其中包含我通过表单添加的对象(付款)。 添加对象后,我对 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>
我遇到的问题是未输入数据时单击按钮更新完成,table 显示为空! 但是,验证消息正确显示,因为存在强制性数据。
数据table是
<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;
//CLASS
@RequestScoped
@Named(值="paymentBean") public class 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.- 确保将此数据表放入表单标记中。
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