【问题标题】:Editing rows in p:dataTable编辑 p:dataTable 中的行
【发布时间】:2014-09-30 21:00:20
【问题描述】:

我尝试使用 PrimeFaces 3.1.1 更新数据表行,但它使所有值都为空。

 public void onRowEdit(RowEditEvent event) {
    Client us= (Client) event.getObject();
    System.out.println("event edit"+us);
    clientService.editClient( us );

    FacesMessage msg = new FacesMessage("Client modifié", ((Client) event.getObject()).getName_customer());
    FacesContext.getCurrentInstance().addMessage(null, msg);
}

这是我的页面 xhtml:

 <h:form>
 <p:dataTable var="client" value="#{clientBean.clients}" widgetVar="clientTable" emptyMessage="No customers found with given criteria" filteredValue="#{clientBean.filteredClients}" paginator="true" rows="10" rowsPerPageTemplate="5,10,15"  editable="true" id="testContainer">
 <p:ajax event="rowEdit" update="@this" listener="#{clientBean.onRowEdit(event)}"  />
 <f:facet name="header"><p:outputPanel><h:outputText value="Recherche d'un client:" /> </p:outputPanel>
 </f:facet>
 <p:column filterBy="#{client.user.username}" headerText="Collaborateur"  filterMatchMode="contains">
 <h:outputText value="#{client.user.username}" />
  </p:column>
 <p:column filterBy="#{client.name_customer}" headerText="Nom"  filterMatchMode="contains">
  <f:facet name="output">
<h:link outcome="CustomerDetails?faces-redirect=true&amp;includeViewParams=true"  value="#{client.name_customer}"  >
<f:param  name="idCustomer" value="#{client.costumer_id}"></f:param>
 <f:param  name="nameCustomer" value="#{client.name_customer}"></f:param>
</h:link> </f:facet>
<f:facet name="input"><p:inputText  value="#{client.name_customer}"/></f:facet>
</p:cellEditor> 
</p:column>
<p:column filterBy="#{client.statut}" headerText="Statut"  filterMatchMode="contains">

【问题讨论】:

  • 这个监听器方法是被rowEdit事件调用的吗?如何在&lt;p:dataTable&gt; 中调用rowEdit 事件?
  • 您的Client 模型中真的有name_customer 属性吗?该名称不遵循一般命名约定。它应该看起来像nameCustomer(虽然它不应该是一个问题)。
  • 是的,我的模型中有 name_customer 属性,在添加客户端的情况下没有问题
  • 客户端对象是被修改的字段还是代表数据表中的一行?如果它代表一行,您可能需要查看 RowEditEvent.getObject().getSoure()

标签: jsf primefaces


【解决方案1】:

问题是您的对象 Client us 为 null ,如果为 null ,请尝试显示您的对象 us 的属性,以便确认您没有得到你的对象从你的页面正确。所以我建议你替换它:

<p:ajax event="rowEdit" update="@this" listener="#{clientBean.onRowEdit}" />

这样

<p:ajax event="rowEdit" update="@this" listener="#{clientBean.onRowEdit(event)}" />

请注意,我只是将事件属性添加到 onRowEdit。

【讨论】:

  • 当我向 onRowEdit 添加事件属性时,我有这个异常: javax.el.E​​LException: /pages/newCostumer.xhtml @76,85 listener="#{clientBean.onRowEdit(event)}" : java.lang.NullPointerException at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111) at org.primefaces.component.behavior.ajax.AjaxBehaviorListenerImpl.processAjaxBehavior(AjaxBehaviorListenerImpl.java:42)跨度>
  • 你能发布你的页面 xhtml 吗?
猜你喜欢
  • 2017-01-16
  • 2018-05-02
  • 2016-04-26
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
相关资源
最近更新 更多