JSF PrimeFaces中的DataTable p:columns

4

ive got a Primefaces DataTable like this

<p:dataTable
   value="#{valueList.value}"
   var="value"
   selection="#{valueList.selected}"
   id="measurementTable"
   paginator="true"
   rows="20"
   rowsPerPageTemplate="20,25,30,35,40"/>

使用这个功能可以创建动态列。

<p:columns
  value="#{valueList.columns}"
  var="column"
  columnIndexVar="colIndex"
 />

这个很好,我的数据表看起来不错。但是当我添加了……
  sortBy="#{value.charge}"

我使用了p:columns,当我点击某一列进行排序时,CSS样式会被破坏,而且我得到的是一个数据列表而不是DataTable,这非常不美观。


我的代码:

<p:dataTable
        value="#{measurementList.measurements}"
        var="measurement"
        selection="#{measurementList.selected}"
        id="measurementTable"
        paginator="true"
        rows="20"
        rowsPerPageTemplate="20,25,30,35,40"
        rowKey="#{measurement.mdkFid}"
        emptyMessage="#{measurementList.getCapString('no_records_found')}">

        <p:column selectionMode="multiple" style="width:18px" />

        <p:column>
            <p:commandLink title="#{measurementList.getString('edit')}" update=":contentPanel">
                <h:outputText styleClass="ui-icon ui-icon-pencil" />
                <f:actionListener binding="#{measurementList.editSelected(measurement) }" />
                <f:actionListener binding="#{navigation.goTo('/xhtml/measurements/editMeasurement.xhtml') }" />
            </p:commandLink>
        </p:column>

        <p:columns
            value="#{measurementList.columns}"
            var="column"
            columnIndexVar="colIndex"
            styleClass="measurementListDatatableColumn"
            sortBy="#{column.displayName}" 
            >
            <f:facet name="header">#{column.displayName}</f:facet>
                <p:column>
                    #{measurement[column.methodName]}
                </p:column>
        </p:columns>

有点离题:为什么你要从你的后台bean方法中加载emptyMessage消息?你可以直接使用#{msg[SOME_MESSAGE_KEY]}并在您的“主”模板中放置一个<f:loadBundle var="msg" basename="org.example.localization.project" />。然后在所述包(源代码)中创建 project_XX.bundle,就应该会被加载。 - Roland
1个回答

4
您的排序应该类似于:
sortBy="#{value[column.charge]}"

请查看展示示例 数据表格 - 动态列 更改
 <p:columns
        value="#{measurementList.columns}"
        var="column"
        columnIndexVar="colIndex"
        styleClass="measurementListDatatableColumn"
        sortBy="#{column.displayName}" 
        >
        <f:facet name="header">#{column.displayName}</f:facet>
            <p:column>
                #{measurement[column.methodName]}
            </p:column>
    </p:columns>

转化为

 <p:columns
        value="#{measurementList.columns}"
        var="column"
        columnIndexVar="colIndex"
        styleClass="measurementListDatatableColumn"
        sortBy="#{measurement[column.methodName]}" 
        >
        <f:facet name="header">
            #{column.displayName}
        </f:facet>

         #{measurement[column.methodName]}

    </p:columns>

通常情况下,用于显示列数据的 EL 表达式应当用于 sortBy

2
当我使用展示中的示例时,它会显示相同的东西。 - user1740789
在展示中,他们使用以下代码: #{column.header} #{car[column.property]}请展示你的代码... - Daniel
用 #{measurement[column.methodName]} 表示我的 BackingBean Measurement 中的字段,例如 #{measurement.id},这将返回我的值。 - user1740789
为什么在<p:columns>中要使用<p:column>? - Daniel
1
通常情况下:用于显示列数据的相同EL表达式应该用于“sortBy”。 - Daniel
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接