我使用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);
}
}
有谁知道为什么?
答案 0 :(得分: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>
同样为您的工作开始,您的编辑将会有效。
答案 1 :(得分:0)
你的条件!newValue.equals(oldValue))永远不会返回true,因为oldValue和newValue是同一个对象