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 очень ооооооо дискретен), и решил просто визуализировать много пустых таблиц.

теперь таблица работает нормально.

Другие вопросы по тегам