无法使用PrimeFaces中的OnRowEdit编辑数据表中的值

时间:2014-12-12 09:18:46

标签: jsf jsf-2 primefaces

我已经跟随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>

并在bean中:

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数据库中没有变化..有人可以帮我吗?

3 个答案:

答案 0 :(得分:0)

有一件事是奇怪/错误的,可能会或可能不是你问题的原因,但我会建议修复。从update=":form:msgs"开始,我假设你有一个封闭的标签,如<h:form id="form"><p:growl id="msgs"。另一方面,你重复id="form"内的<p:dataTable id="form"。重复id确实是错误的,但我不确定它是否是你问题的原因

答案 1 :(得分:0)

首先,您必须向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" />

答案 2 :(得分:0)

使用您的ID代替:form,:msgs。

<p:ajax event="rowEdit" listener="#{myMB.onRowEdit}" update="messages tab" />
<p:ajax event="rowEditCancel" listener="#{myMB.onRowCancel}" update="messages tab" />

此外,您还必须按编辑对象更新列表“ allArticles”。