【问题标题】:Primefaces editable datatable inserting itself on row edit?Primefaces可编辑数据表在行编辑时插入自身?
【发布时间】:2016-04-17 16:09:50
【问题描述】:

我正在尝试使用 Primefaces 和 Tomcat7 托管的 java 将数据表放在一起显示一些公司信息。不幸的是,由于敏感信息,我无法详细说明我正在使用的数据。我的代码已被修改,只是为了将变量名称更改为更通用的名称,并删除不涉及页面的业务逻辑。

我几乎一切正常,除了当我尝试向我的数据表添加新行时,它会将整个表插入到我正在编辑的行中。刚刚取消编辑时也会发生这种情况。

考虑到我只是将一个项目插入到 List 对象中,这非常令人困惑,而 Primefaces 又将其输入到表中。

这是我的 xhtml 的内容:

<h:form id="form">
<p:growl id="msgs" showDetail="true"/>

<p:dataTable var="object" value="#{page.objectList}" id="tableName"
     scrollable="false"
     liveResize="true"
     resizableColumns="true"
     editable="true"
     sortMode="multiple"
     reflow="true"
     paginator="true"
     rows="20"
     paginatorTemplate="{CurrentPageReport} {PreviousPageLink} {PageLinks} {NextPageLink} {RowsPerPageDropdown}"
     rowsPerPageTemplate="10,20,50,100">
  <f:facet name="header">
      Table Title
  </f:facet>

  <p:ajax event="rowEdit" listener="#{page.onRowEdit}" update=":form:msgs" />
  <p:ajax event="rowEditCancel" listener="#{page.onRowCancel}" update=":form:msgs" />

  <p:column headerText="col1">
    <p:cellEditor>
        <f:facet name="output"><h:outputText id="col1Output" value="#{object.col1item}" /></f:facet>
        <f:facet name="input">
            <p:inputText id="col1Input" value="#{object.col1item}" style="width:100%" />
        </f:facet>
    </p:cellEditor>
  </p:column>

  <p:column headerText="col2">
      <p:cellEditor>
          <f:facet name="output"><h:outputText value="#{object.col2item}" /></f:facet>
          <f:facet name="input">
              <h:selectOneMenu value="#{object.col2item}" style="width:100%">
                  <f:selectItems value="#{object.categories}" var="col2item" itemLabel="#{col2item}" itemValue="#{col2item}" />
              </h:selectOneMenu>
          </f:facet>
      </p:cellEditor>
  </p:column>

  <p:column headerText="col3">
    <p:cellEditor>
        <f:facet name="output"><h:outputText id="col3Output" value="#{object.col3item}" /></f:facet>
        <f:facet name="input">
            <p:inputText id="col3Input" value="#{object.col3item}" style="width:100%" />
        </f:facet>
    </p:cellEditor>
  </p:column>

  <p:column headerText="col4">
    <p:cellEditor>
        <f:facet name="output"><h:outputText id="col4Output" value="$#{object.col4item}" /></f:facet>
        <f:facet name="input">
            <p:inputText id="col4Input" converterId="com.gvea.utilities.business.Money" value="#{object.col4item}" style="width:100%" />
        </f:facet>
    </p:cellEditor>
  </p:column>

  <p:column headerText="col5">
    <p:cellEditor>
        <f:facet name="output"><h:outputText id="col5Output" value="#{object.col5item}" /></f:facet>
        <f:facet name="input">
            <p:inputText id="col5Input" value="#{object.col5item}" style="width:100%" />
        </f:facet>
    </p:cellEditor>
  </p:column>

  <p:column style="width:32px">
      <p:rowEditor/>
  </p:column>

</p:dataTable>
</h:form>

还有 onRowEdit 和 onRowCancel:

public void onRowEdit(RowEditEvent event) {
    /*-- modify object --*/
    ...
    objectList.add(0, newObject);
    /*-- Give success or failure message --*/
}

public void onRowCancel(RowEditEvent event) {
    FacesMessage msg = new FacesMessage("Edit Cancelled", "");
    FacesContext.getCurrentInstance().addMessage(null, msg);
}

objectList.add(...) 是唯一一个我可以做任何可能触发页面的事情的地方...而且我已经验证了“newObject”实际上是正确类的一个实例。然而我最终还是得到了这个:

感谢您的帮助!

【问题讨论】:

  • 如果删除.add(...) 行会怎样?
  • 如果我要删除该行,则不会添加我的新行,但仍然会发生这个奇怪的错误。此外,objectList 只是一个 java 列表,其中 add 函数获取要添加的索引以及要添加的对象。

标签: jsf primefaces datatable tablecelleditor


【解决方案1】:

事实证明,我并没有更新数据表:

<p:ajax event="rowEdit" listener="#{page.onRowEdit}" update=":form:msgs" />
<p:ajax event="rowEditCancel" listener="#{page.onRowCancel}" update=":form:msgs" />

只需将form 添加到更新行即可解决我的问题。像这样:

<p:ajax event="rowEdit" listener="#{page.onRowEdit}" update=":form:msgs form" />
<p:ajax event="rowEditCancel" listener="#{page.onRowCancel}" update=":form:msgs form" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-22
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多