Primefaces - редактируемая динамическая таблица
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ - ЭТО НЕ DUP OF Можно ли использовать p:cellEditor внутри тега ap: columns? (сначала прочитайте оба)
Я пытаюсь адаптировать это решение к своему контексту - http://forum.primefaces.org/viewtopic.php?f=3&t=13275
У меня есть динамическая таблица, как это
Управляемый Боб
@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: columns, приведенная выше ссылка предлагает использовать c: forEach для развертывания p: columns в несколько элементов p: column и для каждого элемента. из них примените p:cellEditor.
Ссылка выше также ссылается на неработающую ссылку - https://stackru.com/questions/10229453/jsf-using-primefaces-datatable-to-implement-a-generic-table-viewer-editor-based:-(
Проблема заключается в следующем: часть за пределами пользовательского интерфейса: remove компилирует и показывает мне таблицу с пустыми ячейками, так что, похоже, я здесь перебираю синтаксис значения для значения h:outputText.
Как правильно объявить содержимое ячейки в этом случае?
Я использую простые лица 4.
1 ответ
Проблема была в этой линии
<p:columns value="#{mappingEngineSearchMB.columns}" var="column" columnIndexVar="colIndex" sortBy="#{column}" filterBy="#{column}" filterMatchMode="contains">
поскольку таблица доступна для поиска и может быть отфильтрована, это были ожидаемые значения.
так как JSF настолько дискретен, он просто решил никому не говорить, что ошибка была (JSF очень ооооооо дискретен), и решил просто визуализировать много пустых таблиц.
теперь таблица работает нормально.