2

我有一个带有动态、可拖动和可调整大小的列的 Primefaces 数据表。我需要存储用户对数据表设置的偏好——显示哪些列、它们的顺序和宽度。在支持 bean 中检索显示的列顺序没有问题,但我正在努力解决宽度问题。

<composite:implementation>
    <p:commandButton value="Save" update="" id="editMode" action="#{cc.attrs.bean.saveColumnsConfiguration(cc.clientId)}"/>
    <p:dataTable id="editTable" widgetVar="editTable" var="entity" value="#{cc.attrs.bean.loadEntities(0)}" 
                 rows="5" resizableColumns="true" draggableColumns="true" lazy="true" >
        <c:forEach items="#{cc.attrs.bean.selectedColumns}" var="col">
            <p:column width="#{col.width}">
                <f:attribute name="property" value="#{col.property}" />
            </p:column>
        </c:forEach>
    </p:dataTable>
</composite:implementation>

在支持 bean 中:

public void saveColumnsConfiguration(String clientId) {
    FacesContext currentInstance = FacesContext.getCurrentInstance();
    UIComponent findComponent = currentInstance.getViewRoot().findComponent(clientId+":editTable");
    DataTable table = (DataTable)findComponent;
    List<UIColumn> columns1 = table.getColumns();
    for (UIColumn c : columns1) {
        System.out.println(currentInstance.getViewRoot().findComponent(c.getClientId()).getAttributes().get("property") +" "+ c.getWidth());
    }
}

在 DOM 检查器中,<th/>元素具有带有 ie 的 style 属性。“宽度:100px”设置为由col变量提供。但是,在支持 bean 中,所有列的 c.getWidth()=0。我还尝试<p:column style="width: #{col.width}px">在 bean 中检索它c.getStyle(),结果是width: 0px.

我还尝试了 colResize ajax 事件 - 它在 Integer.parseInt 上给了我 NumberFormatExpression,因为该事件正在返回小数点数字。

我需要做的另一件事是设置缩放到用户屏幕的数据表的列宽。我将列大小存储在 % 中,但需要在渲染之前根据屏幕宽度将这些转换为像素大小。如果我以像素为单位设置宽度,浏览器会正确缩放宽度,但是在用户更改列宽时,列会跳转到它们的实际像素大小,这会弄乱整个表格。知道怎么做吗?

4

0 回答 0