【问题标题】:primefaces - editable dynamic tableprimefaces - 可编辑的动态表
【发布时间】:2014-03-18 09:58:29
【问题描述】:

免责声明 - 这不是 Is it possible to use p:cellEditor inside a p:columns tag? 的副本(请先阅读两者)

我正在尝试根据我的情况调整这个解决方案 - 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://stackoverflow.com/questions/10229453/jsf-using-primefaces-datatable-to-implement-a-generic-table-viewer-editor-based :-(

问题是: ui:remove 之外的部分编译并向我显示一个包含空单元格的表格,所以听起来我在这里搞乱了 h:outputText 值的值语法。

在这种情况下声明单元格内容的正确方法是什么?

我正在使用 primefaces 4。

【问题讨论】:

    标签: jsf jsf-2 primefaces


    【解决方案1】:

    问题出在这一行

    <p:columns value="#{mappingEngineSearchMB.columns}" var="column" columnIndexVar="colIndex" sortBy="#{column}" filterBy="#{column}" filterMatchMode="contains">  
    

    由于该表是可搜索的并且可以被过滤,因此这些是预期值。

    由于 JSF 是如此离散,它只是决定不告诉任何人错误是那个(JSF 太离散了)并决定只渲染很多空表

    现在桌子可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-17
      相关资源
      最近更新 更多