我已经跟随PrimeFaces陈列柜使用行编辑数据表,但我不明白为什么它不更新数据。
这是我的数据表:
<p:dataTable id="tab" var="art" value="#{myMB.allArticles}" editable="true" style="margin-bottom:20px">
<f:facet name="header">
</f:facet>
<p:ajax event="rowEdit" listener="#{myMB.onRowEdit}" update=":form:msgs" />
<p:ajax event="rowEditCancel" listener="#{myMB.onRowCancel}" update=":form:msgs" />
<p:column headerText="Name ">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{art.name}" /></f:facet>
<f:facet name="input"><p:inputText id="modelInput" value="#{art.name}" style="width:100%"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Budget">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{art.budget}" /></f:facet>
<f:facet name="input"><p:inputText value="#{art.budget}" style="width:100%" label="Budget"/></f:facet>
</p:cellEditor>
</p:column>
<p:column style="width:32px">
<p:rowEditor />
</p:column>
</p:dataTable>
在豆子里:
public void onRowEdit(RowEditEvent event ) {
Article f = (Article) event.getObject();
formationFacade.update(f);
FacesMessage msg = new FacesMessage("Article Edited", ((Article) event.getObject()).getName());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
我已经看到了这个:link但它对我不起作用我在编辑后获得了旧的值,我在may数据库中没有变化..有人能帮帮我吗?
有一件事是奇怪/错误的,可能会或可能不是你问题的原因,但我会建议修复。从这个update=":form:msgs"
我假设你有一个像<h:form id="form"><p:growl id="msgs"
这样的封闭标签。另一方面,你重复id="form"
内的<p:dataTable id="form"
。重复id确实是错误的,但我不确定它是否是你问题的原因
首先,你必须提供值为的EditMode
参数
CellEdit
或RowEdit
作为你的情况。
第二,如果你想要一种编辑数据表的简单方法,你可以在没有事件的情况下进行这样的编辑
modifyYourModel(Model x){
// call your function to modify
}
在数据表中,您可以这样做
<p:dataTable id="tab" var="art" value="#{myMB.allArticles}" editable="true" EditMode="rowEdit" style="margin-bottom:20px">
<f:facet name="header">
</f:facet>
<p:ajax event="rowEdit" listener="#{myMB.modifyYourModel(art)}" update=":form:msgs" />
<p:ajax event="rowEditCancel" listener="#{myMB.onRowCancel}" update=":form:msgs" />