我有一个简单的数据表,可以在 primefaces 中进行单元格编辑。它可以工作,但首先,它不会创建 JavaScript 消息,其次,它会为 db 创建 15 个相同的查询。(我可以在休眠控制台中看到)代码是来自官方网站的令牌:
<h:form id="form">
<p:growl id="messages" showDetail="true"/>
<p:contextMenu for="clients" widgetVar="cMenu">
<p:menuitem value="Edit Cell" icon="ui-icon-search" onclick="clientsTable.showCellEditor();return false;"/>
<p:menuitem value="Hide Menu" icon="ui-icon-close" onclick="cMenu.hide()"/>
</p:contextMenu>
<p:dataTable id="clients" var="client" value="#{clientsBean.clients}" paginator="true" rows="5"
editable="true" editMode="cell" widgetVar="clientsTable">
<p:ajax event="cellEdit" listener="#{clientsBean.onCellEdit}" update=":form:messages"/>
<p:column headerText="Name" style="width:25%">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{client.name}"/></f:facet>
<f:facet name="input"><p:inputText id="nameInput" value="#{client.name}"
style="width:96%"/></f:facet>
</p:cellEditor>
</p:column>
因此,当我编辑一些信息并按 Enter 时,它会创建 15 个查询并且不显示 JS 消息。
Bean 的 getClients() 是一个简单的休眠查询(工作正常),并且 onCellEdit() 看起来像
public void onCellEdit(CellEditEvent event) {
Object oldValue = event.getOldValue();
Object newValue = event.getNewValue();
if(newValue != null && !newValue.equals(oldValue)) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue);
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
还出现了新的奇怪错误:该 bean 中的 oldValue 和 newValue 总是相同的。