2013-05-20 54 views
1

我使用Primefaces 3.5.jar和Hibernate。 我有數據錶行編輯監聽器的問題。當我調試項目我可以進入onCancel方法,但onEdit永遠不會啓動。我的XHTML代碼:Primefaces行編輯監聽器不會工作

<f:facet name="header"> 
     Workhours 
    </f:facet> 

    <p:ajax event="rowEdit" listener="#{workhoursBean.onEdit}" update=":form:messages" /> 
    <p:ajax event="rowEditCancel" listener="#{workhoursBean.onCancel}" update=":form:messages" /> 



    <p:column headerText="Start" style="width:20%"> 
     <p:cellEditor> 
      <f:facet name="output"> 
       <h:outputText value="#{workhours.workStart}" /> 
      </f:facet> 
      <f:facet name="input"> 
       <p:inputText value="#{workhours.workStart}" style="width:100%" label="Year"/> 
      </f:facet> 
     </p:cellEditor> 
    </p:column> 

    <p:column headerText="End" style="width:20%"> 
     <p:cellEditor> 
      <f:facet name="output"> 
       <h:outputText value="#{workhours.workEnd}" /> 
      </f:facet> 
      <f:facet name="input"> 
       <p:inputText value="#{workhours.workEnd}" style="width:100%" label="Year"/> 
      </f:facet> 
     </p:cellEditor> 
    </p:column> 

    <p:column style="width:6%"> 
     <p:rowEditor /> 
    </p:column> 

</p:dataTable> 

而且我Bean方法:

public void onCancel(RowEditEvent event) { 
    //do stuff 
} 
public void onEdit(RowEditEvent event) { 
    Object oldValue = event.getObject(); 
    Object newValue = event.getObject(); 
    if(newValue != null && !newValue.equals(oldValue)) { 
     FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 
} 

有任何想法,爲什麼?

回答

0

嗯,我想你試圖把你的編輯字段中的日期。如果你看看在螢火你的迴應,你會看到這樣的錯誤:

<?xml version="1.0" encoding="utf-8"?> 
<partial-response> 
    <error> 
    <error-name> 
    javax.faces.component.UpdateModelException</error-name> 
    <error-message> 
     <![CDATA[org.apache.myfaces.view.facelets.el.ContextAwareELException: javax.el.ELException: Cannot convert Tue May 21 17:44:32 CEST 2010 of type class java.lang.String to class java.util.Date]]> 
</error-message> 
    </error> 
</partial-response> 

所以它打破。您可以用F解決這個問題:convertDateTime

試試這個:

<f:facet name="input"> 
    <p:inputText value="#{workhours.workEnd}" style="width:100%" 
    label="Year"> 
    <f:convertDateTime pattern="dd.MM.yyyy" /> 
    </p:inputText> 
</f:facet> 

而且這樣做對你的workStart和您的編輯工作WIL。

0

您的條件!newValue.equals(oldValue))永遠不會返回true,因爲oldValue和newValue是同一個對象