免责声明 - 这不是Is it possible to use p:cellEditor inside a p:columns tag?(首先阅读)
我正在尝试将此解决方案应用于我的上下文 - http://forum.primefaces.org/viewtopic.php?f=3&t=13275
我有一个像这样的动态表
Managed Bean
@ManagedBean
@ViewScoped
public class MyMB implements Serializable {
private List<String> columns = new ArrayList<String>();
private List<Map<String,String>> data;
private List<Map<String,String>> filteredData;
private String defaultColumnSort;
public void onCellEdit(CellEditEvent event) {
System.out.println(event.getRowIndex());
}
(...)
和xhtml
<p:dataTable
var="dataRow"
value="#{myMB.data}"
paginator="true" rows="10"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
rowsPerPageTemplate="10,50,100"
emptyMessage="No sites found with given criteria"
filteredValue="#{myMB.filteredData}"
editable="true"
editMode="cell"
sortBy="#{myMB.defaultColumnSort}"
id="rowsTable">
<p:ajax event="cellEdit" listener="#{myMB.onCellEdit}"/>
<ui:remove>
<p:columns value="#{myMB.columns}" var="column" columnIndexVar="colIndex" sortBy="#{column}" filterBy="#{column}" filterMatchMode="contains">
<f:facet name="header">#{column}</f:facet>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{dataRow[column]}" />
</f:facet>
<f:facet name="input">
<p:inputText id="modelInput" value="#{dataRow[column]}" style="width:96%"/>
</f:facet>
</p:cellEditor>
</p:columns>
</ui:remove>
<c:forEach items="#{myMB.columns}" var="column" varStatus="loop">
<p:column headerText="#{column}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{dataRow[loop.index].value}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{dataRow[loop.index].value}" />
</f:facet>
</p:cellEditor>
</p:column>
</c:forEach>
ui:remove工作之间的部分(如果我显然删除了ui:remove标记)并向我显示了不可编辑的表。
我正在尝试将p:cellEditor行为添加到这些单元格中,但由于它不适用于p:列,上面的链接建议使用c:forEach将p:列解包为几个p:列项目,并且对于每一个,请应用p:cellEditor。
上面的链接也引用了死链接 - https://stackoverflow.com/questions/10229453/jsf-using-primefaces-datatable-to-implement-a-generic-table-viewer-editor-based: - (
问题是:ui之外的部分:删除编译并向我显示一个带有空单元格的表,所以听起来我在这里弄乱了h:outputText值的值语法。
在这种情况下声明单元格内容的正确方法是什么?
我正在使用primefaces 4。
答案 0 :(得分:1)
问题出在这一行
<p:columns value="#{mappingEngineSearchMB.columns}" var="column" columnIndexVar="colIndex" sortBy="#{column}" filterBy="#{column}" filterMatchMode="contains">
由于该表是可搜索的并且可以过滤,因此这些是预期值。
因为JSF是如此离散,它只是决定不告诉任何人错误(JSF是soooooooooo离散)并且决定只渲染很多空表
现在桌子工作正常。