2011-06-16 32 views
1

我在我的primefaces应用程序中有一个数据表。针对前端代码有在primefaces中单元格编辑没有更新值

<!-- Start of customer datatable --> 
      <p:dataTable var="customer" value="#{customerBean.customers}" paginator="true" selection="#{customerBean.selectedCustomer}" 
      selectionMode="single" onRowSelectUpdate=":custList" onRowSelectComplete="custTab.show()" id="custList" widgetVar="custList" update=":custList"> 
       <f:facet name="header"> 
       List of Customers 
        <p:outputPanel> 
         <p:commandButton value="+" type="button" onclick="addCustDlg.show()"/> 
        </p:outputPanel> 
       </f:facet> 


       <p:column sortBy="#{customer.id}" filterBy="#{customer.id}" update=":custList"> 
        <f:facet name="header"> 
         <h:outputText value="ID"/> 
        </f:facet> 
        <h:outputText value="#{customer.id}"/> 
       </p:column> 

       <p:column sortBy="#{customer.name}" filterBy="#{customer.name}" headerText="NAME" filterMatchMode="contains" update=":custList"> 
        <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{customer.name}"/> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{customer.name}"/> 
        </f:facet> 
        </p:cellEditor> 
       </p:column> 

       <p:column sortBy="#{customer.description}" filterBy="#{customer.description}" headerText="DESCRIPTION"> 
        <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{customer.description}"/> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{customer.description}"/> 
        </f:facet> 
        </p:cellEditor> 
       </p:column> 

       <p:column sortBy="#{customer.signupDate}" filterBy="#{customer.signupDate}" headerText="SIGN UP DATE"> 
        <f:facet name="output"> 
         <h:outputText value="#{customer.signupDate}"/> 
        </f:facet> 
       </p:column> 

       <p:column sortBy="#{customer.validUntil}" filterBy="#{customer.validUntil}" headerText="EXPIRY DATE"> 
        <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{customer.validUntil}"/> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{customer.validUntil}"/> 
        </f:facet> 
        </p:cellEditor> 
       </p:column> 

       <p:column sortBy="#{customer.status}" filterBy="#{customer.status}" headerText="STATUS"> 
        <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{customer.status}"/> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{customer.status}"/> 
        </f:facet> 
        </p:cellEditor> 
       </p:column> 

       <p:column headerText="CREATION DATE" sortBy="#{customer.creationDate}" filterBy="#{customer.creationDate}"> 
        <f:facet name="output"> 
         <h:outputText value="#{customer.creationDate}"/> 
        </f:facet> 
       </p:column> 

       <p:column headerText="LAST UPDATE DATE" sortBy="#{customer.lastUpdateDate}" filterBy="#{customer.lastUpdateDate}"> 
        <f:facet name="output"> 
         <h:outputText value="#{customer.lastUpdateDate}"/> 
        </f:facet> 
       </p:column> 

       <p:column headerText="Options"> 
        <p:rowEditor/> 
       </p:column> 

      </p:dataTable> 
      <!-- End of dataTable (customer datatable) --> 

而对于处理rowEvent的功能是在bean指定为

public void custRowEdit(RowEditEvent event){ 
    Customer cust = (Customer) event.getObject(); 
    EntityManagerHelper.beginTransaction(); 
    custDao.update(cust); 
    EntityManagerHelper.commit(); 
} 

然而,在更新事件,当我编辑单元格在表中,我没有得到属性的新更新值。 enter image description here

就像下图所示,当我将ID为1的条目的状态从11更改为4时,在custRowEdit函数中,当我尝试获取客户对象时,仍然将客户的状态视为11而不是4。

任何人都可以帮助我理解为什么没有设置单元格的值?

+0

你解决了这个问题吗? – vizzdoom 2011-11-16 12:03:49

回答

1

您从哪里调用custRowEdit(RowEditEvent事件)方法。我的代码中没有任何相关的东西。

为了使您的监听器在您的数据表声明中调用add below属性。

rowEditListener = “#{} customerBean.listenerInBackingBean”

<p:dataTable var="customer" value="#{customerBean.customers}" paginator="true" selection="#{customerBean.selectedCustomer}" 
      selectionMode="single" onRowSelectUpdate=":custList" onRowSelectComplete="custTab.show()" id="custList" widgetVar="custList" update=":custList"> 
       <f:facet name="header" 

rowEditListener="#{customerBean.cutRowEvent}" 
> 
+0

我的不好...我在dataTable中指定了rowEditListener。但是,问题仍然存在。我仍然得到陈旧的价值,而不是更新的价值 – rush00121 2011-06-16 19:31:22

1

检查的customerBean.customers实施。每次调用方法时,我都会从数据库中重新加载内容。错误。这应该发生在构造函数中。现在一切正常。认为这是一个JavaScript错误...

1

谢谢这帮助了我。

我可以添加,而不是从构造函数中的查询加载列表,如果有一个@SessionScoped托管bean可以改为使用reset()方法重置列表为null,然后从列表中延迟填充列表查询。复位然后可以在页面加载使用F称为:事件:

<f:view> 
     <f:metadata> 
      <f:event type="preRenderView" listener="#{sessionScopedBean.reset}"/> 
     </f:metadata> 
    </f:view>   
-1

你想念的号码:AJAX事件来触发任何你想要的单元格编辑

这是后做的方法,功能或像

<p:ajax event="cellEdit" listener="#{mBean.onCellEdit}" update="elementX" /> 
+0

这是更适合评论,因为它不是一个真正的答案 – 2014-07-15 16:48:33

0

我遇到了类似的情况,通过从dataTable中删除更新=“”标签解决。该表的默认行为是更新该行,在我的情况下显然没有发生。

相关问题