检索和设置DataTable列的宽度

时间:2013-07-05 14:31:39

标签: java jsf jsf-2 primefaces

我有一个Primefaces DataTable,包含动态,可拖动和可调整大小的列。我需要存储用户对数据表设置的偏好 - 显示哪些列,它们的顺序和宽度。 检索辅助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。由col变量提供的“width:100px”设置。但是,在backing bean中,所有列都有c.getWidth()= 0。我还尝试<p:column style="width: #{col.width}px">并在c.getStyle()的bean中检索它,结果为width: 0px

我也尝试过colResize ajax事件 - 它在Integer.parseInt上给我NumberFormatExpression,因为事件返回小数点数。

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

0 个答案:

没有答案