【问题标题】:selectManyCheckbox into p:dataTable columnselectManyCheckbox 进入 p:dataTable 列
【发布时间】:2025-11-23 08:15:02
【问题描述】:

我无法在 p:dataTable 中使用 selectManyCheckbox 正确查看列的内容。

这是我的 .xhtml:

<h:form id="projAccess" enctype="multipart/form-data">

    <p:dataTable tableStyle="width:auto" id="i_dtb2"  var="p" value="#{comBean.l_uSrcRes}" paginator="true" rows="5" rowsPerPageTemplate="5,10"
        paginatorPosition="bottom">

    <p:columnGroup type="header">
        <p:row>
            <p:column rowspan="2" headerText="User" />
            <p:column rowspan="2" headerText="Asset" />
            <p:column colspan="6" headerText="Roles" />
            <p:column rowspan="2" colspan="2" headerText="Action" />
        </p:row>
        <p:row>
            <p:column headerText="Project Manager"></p:column>
            <p:column headerText="Project Manager Deputy"></p:column>
            <p:column headerText="Business Analyst"></p:column>
            <p:column headerText="Functional Analyst"></p:column>
            <p:column headerText="Technical Analyst"></p:column>
            <p:column headerText="Developer"></p:column>
        </p:row>
    </p:columnGroup>

        <p:column>
            <h:outputText value="#{p.usercd}" />
        </p:column>

        <p:column>
            <h:outputText value="#{p.asset}" />
        </p:column>

        <p:column colspan="6">          
        <h:panelGroup layout="block" >
                <p:selectManyCheckbox columns="6"  value="#{p.rolesList}">
                <f:selectItems value="#{comBean.l_roles}" var="role" itemLabel="#{role}" itemValue="#{role}"  />
                </p:selectManyCheckbox>
        </h:panelGroup>
        </p:column>

        <p:column>
            <p:commandButton action="#{comBean.m_updateAccess}" ajax="false" icon="ui-icon-pencil">
                <f:setPropertyActionListener value="#{p}" target="#{comBean.f_selectedUser}" />
                    <f:param name="area" value="project" />
            </p:commandButton>
        </p:column>

        <p:column>
            <p:commandButton action="#{ubean.m_deleteUser}" ajax="false" icon="ui-icon-trash">
                <f:setPropertyActionListener value="#{p}" target="#{comBean.f_selectedUser}" />
                    <f:param name="area" value="project" />
            </p:commandButton>
        </p:column>

    </p:dataTable>
        </h:form>

结果如下:

如何使内容适应标题列?

【问题讨论】:

  • 我看不到这里有什么不正确的地方,请澄清您的问题
  • 列中的值(check + Project Manager ecc...)与字段名称(Project Manager)不匹配。每个值(check + name)必须只属于一个列。
  • 那么你很可能对 columnGroup/和它们的 colspan 有问题。
  • 可能是,但我不知道是什么。

标签: jsf primefaces datatable selectmanycheckbox


【解决方案1】:

您在p:dataTable 中使用tableStyle="width:auto"
删除它会将复选框与其各自的列对齐,但您会注意到列仍然有点未对齐。

要解决此问题,您可以在复选框 p:column 上添加 style="padding:0px;"
您的代码将如下所示。

<p:dataTable id="i_dtb2" var="p" value="#{comBean.l_uSrcRes}" paginator="true" rows="5" rowsPerPageTemplate="5,10"
        paginatorPosition="bottom">

    // other codes

    <p:column colspan="6" style="padding:0px;">  
        // other codes
    </p:column>

    // other codes

</p:dataTable>


另一方面,如果您的功能规范允许,您可以删除 [Project Manager, Project Manager Vice, etc] 标题,因为您将它们显示在复选框旁边。
您必须删除p:columnGroup 并将headerText 设置为它们各自的列,其中“角色”为headerText 用于您的复选框列。

希望这会有所帮助。

【讨论】: