带有RowEditor的字符串数据表不会保存更改

时间:2016-09-02 15:29:16

标签: jsf primefaces datatable

我需要在页面上显示字符串列表,用户需要能够添加,编辑和删除条目。我想我会使用DataTable来实现这一目标。

页面似乎正常工作 - 值显示在DataTable中,单击“删除”图标时删除行,单击“添加”按钮时添加行。 但是,通过单击铅笔图标来访问RowEditor时,单击复选标记时不会反映更改;该行的值只是空白

以下是显示问题的GIF - http://imgur.com/a/dxlht

我已经从项目中的其他页面复制了大部分DataTable标记,这些标记都正常工作。我在这里看到的唯一区别是这是一个字符串的DataTable,而不是一个复杂的对象。当InputText的值只是一个简单的String时,这会影响RowEditor的“输入”方面吗?

这是DataTable标记:

<h:form>
  <p:dataTable id="configTable" value="#{bean.configs}" var="config"
      editable="true" editMode="row" emptyMessage="No entries exist.">
    <p:column>
      <p:cellEditor>
        <f:facet name="output"><h:outputText value="#{config}" /></f:facet>
        <f:facet name="input"><p:inputText value="#{config}" /></f:facet>
      </p:cellEditor>
    </p:column>
    <p:column>
      <p:rowEditor />
    </p:column>
    <p:column>
      <p:commandLink update="configTable" styleClass="ui-icon ui-icon-trash" process="@this" 
          actionListener="#{bean.removeEntry(config)}" />
    </p:column>
    <f:facet name="footer">
      <p:commandButton value="Add Entry" update="configTable" icon="ui-icon-plus" style="float:right;" process="@this" 
          actionListener="#{bean.addEntry()}" />
    </f:facet>
  </p:dataTable>
</h:form>

以下是相关的bean代码:

private List<String> configs;

public List<String> getConfigs() {
  return this.configs;
}

public void setConfigs(List<String> configs) {
  this.configs = configs;
}

public void removeEntry(String entry) {
  this.configs.remove(entry);
}

public void addEntry() {
  this.configs.add("");
}

我正在使用PrimeFaces 5.3 / JSF 2.0。

1 个答案:

答案 0 :(得分:0)

请注意,当您按下复选标记(以完成编辑行)时,JSF会调用表行的任何类的setter方法。

String类没有setter方法,因此您需要创建一个只包含一个字段的包装类(使用getter和setter),并将configs对象更改为yourClass个对象的列表。