1

我使用 Primefaces 3.5.jar 和 Hibernate。我对数据表行编辑侦听器有问题。当我调试项目时,我可以输入 onCancel 方法,但 onEdit 永远不会启动。我的 XHTML 代码:

    <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);  
    }
}

有谁知道为什么?

4

2 回答 2

0

好吧,我想您正试图在编辑字段中输入日期。如果您在 firebug 中查看您的响应,您将看到如下错误:

<?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 执行此操作,并且您的编辑将起作用。

于 2013-05-21T15:48:42.073 回答
0

您的条件 !newValue.equals(oldValue)) 永远不会返回 true,因为 oldValue 和 newValue 是同一个对象

于 2013-08-12T11:10:58.240 回答