显示嵌套数据表而不重复原始数据

时间:2015-04-20 13:26:39

标签: jsf richfaces

我想显示数据库中的数据但不能重复相同的配置文件,只需在现有配置文件中添加位置即可。上面的例子变得清晰:

+-------------------+---------------+---------------+
|   PROFILE         |   LOCATION    |   STATUS      |
+-------------------+---------------+---------------+
+-------------------+---------------+---------------+
|   Admin           |   Chief       |   OK          |
+-------------------+---------------+---------------+
|   Director        |   Supervision |   OK          |
+-------------------+---------------+---------------+
|   Secretary       |   Supervision |   OK          |
+-------------------+---------------+---------------+
|                   |   Admin       |   OK          |
|                   |   Chief       |   OK          |
|   Chief-accessor  |   Director    |   OK          |
|                   |   Secretary   |   OK          |
|                   |   Supervision |   OK          |
+-------------------+---------------+---------------+

使用这段代码作为我的数据表,我只能重复它们,但我不能将它们分组:

<rich:panel header="User location info" style="margin: 20px 0 !important;">
    <h:dataTable id="userLocationList"
        value="#{userLocation.list()}" var="row"
        styleClass="rich-table"
        headerClass="rich-table-subheader rich-table-subheadercell rich-table-thead"
        rowClasses="rich-table-row"
        columnClasses="rich-table-cell,rich-table-cell,rich-table-cell">
        <h:column>
            <f:facet name="header">
                <h:outputText value="Profile" />
            </f:facet>
            <center>
                <h:outputText value="#{row.profile}" />
            </center>
        </h:column>
        <h:column>
            <f:facet name="header">
                <h:outputText value="Location" />
            </f:facet>
            <h:outputText value="#{row.location}" />
        </h:column>
        <h:column>
            <f:facet name="header">
                <h:outputText value="Status" />
            </f:facet>
            <center>
                <h:outputText value="#{row.profile.status ? 'OK' : 'Inactive'}" />
            </center>
        </h:column>
    </h:dataTable>
</rich:panel>

像这样:

+-------------------+---------------+---------------+
|   PROFILE         |   LOCATION    |   STATUS      |
+-------------------+---------------+---------------+
+-------------------+---------------+---------------+
|   Admin           |   Chief       |   OK          |
+-------------------+---------------+---------------+
|   Director        |   Supervision |   OK          |
+-------------------+---------------+---------------+
|   Secretary       |   Supervision |   OK          |
+-------------------+---------------+---------------+
|   Chief-accessor  |   Admin       |   OK          |
+-------------------+---------------+---------------+
|   Chief-accessor  |   Chief       |   OK          |
+-------------------+---------------+---------------+
|   Chief-accessor  |   Director    |   OK          |
+-------------------+---------------+---------------+
|   Chief-accessor  |   Secretary   |   OK          |
+-------------------+---------------+---------------+
|   Chief-accessor  |   Supervision |   OK          |
+-------------------+---------------+---------------+

来自list()的{​​{1}}方法只是UserLocation中的select

table_user_location

我试图在StackOverflow中按照一些答案来说明将数据表放在另一个数据表中,但我可以重复所有没有组配置文件的位置,例如:

select userLoc from UserLocation userLoc where userLoc.user.id = :userId

我怀疑是我正在做的通用查询,所以表中的重复内容。有没有人对此操作有所了解?

相关问题:

1 个答案:

答案 0 :(得分:0)

由于我无法以相同的配置文件返回所有位置并且只使用一个查询的方式,我决定采用不同的方式,我想使用两个查询,一个没有重复配置文件({{1根据配置文件,每个位置一个。只有实现(如果我错了,请纠正我)属性select distinct ...按列而不是行呈现。因此,在某种程度上,第一个配置文件列是在没有重复配置文件的情况下返回的,但是如果位置显示的单元格是给定配置文件,则每个单元格中的位置相同,所有用户位置都没有区别。就在那时,我意识到自己非常专注于关注用户档案的地方。

运行h:datatable个配置文件并创建一个方法,以便在创建表时返回配置文件的位置。与报告的问题一样,select distinct位于另一个datatable内。

终于得到了我的代码:

datatable