我需要在页面上显示字符串列表,用户需要能够添加,编辑和删除条目。我想我会使用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。
答案 0 :(得分:0)
请注意,当您按下复选标记(以完成编辑行)时,JSF会调用表行的任何类的setter方法。
String类没有setter方法,因此您需要创建一个只包含一个字段的包装类(使用getter和setter),并将configs对象更改为yourClass
个对象的列表。