我对数据表的单元格编辑模式有疑问。
我每行只有一个单元格需要进行编辑。
我可以编辑它,但更改后的值不会显示。虽然奇怪的是,当我重新编辑同一个单元格时,会显示更改的值。
该onChange
调用是对服务器端 bean 进行的,但旧值和新值都相同。
基于类似于陈列柜的示例,不显示咆哮消息。
这是完整的xhtml
代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!-- jsf:pagecode language="java" location="/src/main/java/pagecode/ManageIniFile.java" --><!-- /jsf:pagecode -->
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
template="theme/ccd.xhtml">
<ui:define name="body-content">
<center>
<h:form styleClass="form" id="form">
<p:growl id="messages" showDetail="true"/>
<h:panelGrid columns="1" cellpadding="20" width="50%">
<h1 class="title ui-widget-header ui-corner-all">Manage Environments</h1>
<div class="entry">
<p:tabView id="tabView" var="section" value="#{iniFile.sections}">
<p:tab id="sectionTab" title="#{section}">
<p:dataTable var="entry" value="#{iniFile.getEntries(section)}" editable="true" editMode="cell">
<p:ajax event="cellEdit" listener="#{pc_ManageIniFile.onCellEdit}" update=":form:messages" />
<p:column headerText="Entry">
<h:outputText value="#{entry.entry}" />
</p:column>
<p:column headerText="Value">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{entry.value}" /></f:facet>
<f:facet name="input"><p:inputText value="#{entry.value}" style="width:46%" label="Value" /></f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
</p:tab>
</p:tabView>
<h:panelGrid columns="2" width="50%">
<h:commandButton type="submit" value="Add Environment" styleClass="loginButton" id="addSection" />
<h:commandButton type="submit" value="Save Environment" styleClass="loginButton" id="saveFile" />
</h:panelGrid>
</div>
</h:panelGrid>
</h:form>
</center>
</ui:define>
</ui:composition>
具有 onCellEdit() 方法的页面代码 bean 如下:
public void onCellEdit(CellEditEvent event)
{
Object oldValue = event.getOldValue();
Object newValue = event.getNewValue();
System.out.println("oldValue=" + oldValue);
System.out.println("newValue=" + newValue);
if (newValue != null && !newValue.equals(oldValue))
{
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue);
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
不管我在编辑什么,oldValue
总是等于newValue
. :哭:
比我更了解的人可以提供任何建议吗?
一旦这个页面工作,应用程序就完成了。
谢谢,
-克里斯
作为后续,我尝试了 Mojarra 2.2.6 和 MyFaces 2.2.2 以及 PF 4 和 5.0.RC1。同样的结果。我不认为单元格编辑在 tabView 中起作用。我已经设法让展示示例正常工作,所以我知道单元格编辑适用于 WAS 8.5.5.1 和 MF 2.2.2。