我使用的是Primefaces 5.1。 我有一个数据表,想直接在单元格中编辑。 它工作,当我使用editMode =“row”与p:rowEditor,但我想要 在没有rowEditor的单元格中直接编辑。 Wit editMode =“cell”我没有得到CellEditEvent。 怎么可能?
最好的问候
这是我的JSF页面:
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="${pageContext.request.contextPath}/templates/default.xhtml">
<ui:define name="content">
<h1>Hannymede Berechtigungsverwaltung</h1>
<p:panel header="Berechtigungsverwaltung">
<p:fieldset legend="Gruppe" style="margin-bottom:20px">
<h:form id="roleSelectorForm">
<p:selectOneMenu id="roleSelector" onchange="submit()"
value="#{authorityController.currentRole}"
converter="RoleConverter" hideNoSelectionOption="false">
<f:selectItem id="noRole" itemLabel="Gruppe auswählen"
itemValue="" noSelectionOption="true" />
<f:selectItems value="#{roleController.allRoles}" var="_role"
itemValue="#{_role}" itemLabel="#{_role.toString()}" />
</p:selectOneMenu>
</h:form>
</p:fieldset>
<p:fieldset legend="Berechtigungen der Gruppe"
style="margin-bottom:20px">
<h:form id="dataTableForm">
<p:dataTable id="authoritiesTable" editable="true" editMode="cell"
value="#{authorityController.currentRole.authoritys}" var="tw"
rowKey="#{tw.id} - #{tw.hashCode()}" rowIndexVar="rowIndex">
<p:ajax event="rowEdit"
listener="#{authorityController.authorityChanged}"></p:ajax>
<p:column sortBy="#{tw.voClassDesc.businessName}"
filterBy="#{tw.voClassDesc.businessName}">
<f:facet name="header">
<h:outputText value="Objekt" />
</f:facet>
<h:outputText value="#{tw.voClassDesc.businessName}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Lesen" />
</f:facet>
<p:cellEditor>
<f:facet name="input">
<p:selectBooleanCheckbox value="#{tw.autRead}" />
</f:facet>
<f:facet name="output">
<p:selectBooleanCheckbox value="#{tw.autRead}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Erstellen" />
</f:facet>
<p:cellEditor>
<f:facet name="input">
<p:selectBooleanCheckbox value="#{tw.autInsert}" />
</f:facet>
<f:facet name="output">
<p:selectBooleanCheckbox value="#{tw.autInsert}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Ändern" />
</f:facet>
<p:cellEditor>
<f:facet name="input">
<p:selectBooleanCheckbox value="#{tw.autUpdate}" />
</f:facet>
<f:facet name="output">
<p:selectBooleanCheckbox value="#{tw.autUpdate}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Löschen" />
</f:facet>
<p:cellEditor>
<f:facet name="input">
<p:selectBooleanCheckbox value="#{tw.autDelete}" />
</f:facet>
<f:facet name="output">
<p:selectBooleanCheckbox value="#{tw.autDelete}" />
</f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
</h:form>
</p:fieldset>
</p:panel>
</ui:define>
<ui:define name="title">Hannymede Berechtigungsverwaltung</ui:define>
</ui:composition>
您好, 我确实读过这本手册。 所以在cellEdit模式中查看我的数据表。
<p:dataTable id="authoritiesTable" editable="true" editMode="cell"
value="#{authorityController.currentRole.authoritys}" var="tw"
rowKey="#{tw.id} - #{tw.hashCode()}" rowIndexVar="rowIndex">
<p:ajax event="cellEdit"
listener="#{authorityController.authorityChanged}" update=":dataTableForm:authoritiesTable"></p:ajax>
我的Bean方法没有得到事件
public void authorityChanged(CellEditEvent e) {
Object oldValue = e.getOldValue();
这是“cellEdit”模式中的表 - 我没有事件。
最好的问候
答案 0 :(得分:1)
使用editMode="cell"
时,您需要使用cellEdit
事件而不是rowEdit
。此外,您的ajax侦听器应该是具有以下签名的bean方法:public void onCellEdit(CellEditEvent event)
因此,在您的示例中,将<p:ajax event="rowEdit" ... />
替换为<p:ajax event="cellEdit" ... />
并检查您的bean方法
public void authorityChanged(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);
}
}
参考文献:PrimeFaces showcase和PrimeFaces 5.1 User Guide(第163和171页)