我正在尝试更改现有数据表(由以前的开发人员编写),以便您以sysadmin身份登录时可以看到整个表,但只有在以其他人身份登录时才能看到您自己的详细信息。
我尝试过为表中的每个值添加rendered
标记。这让我看到我的检查工作正常,并使基本测试工作。该部分代码按预期运行。然而,有一个明显的缺陷,即无论是否填满,额外的行仍会生成。
这是我的代码:
<h:dataTable value="#{userBean.users}" var="userAccount"
binding="#{userBean.userTable}"
styleClass="defaultTable"
headerClass="tableHeader"
rowClasses="evenRow,oddRow"
columnClasses="col512">
<h:column>
<f:facet name="header">
<h:outputText value="Username"/>
</f:facet>
<h:commandLink value="#{userAccount.userName}"
action="#{userBean.edit}"
rendered="#{(userAccount.userName == settings.user.userName)
|| settings.user.systemAdministrator}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="User Group"/>
</f:facet>
<h:outputText id="userGroup" value="#{userAccount.userGroup.userGroupName}"
rendered="#{(userAccount.userName == settings.user.userName)
|| settings.user.systemAdministrator}"/>
</h:column>
</h:dataTable>
当不是systemAdministrator时(可预测)输出如下内容:
生成所有行但仅为当前用户填写。
我理解为什么会这样做,但我不知道如何让它去做我想做的事情。这就像我想要render
/而不是render
整行,但数据表是由列而不是行生成的,所以我看不到如何添加它。即使添加<c:if>
,我也需要在行周围添加它,所以我不知道如何在列生成它时如何做到这一点。
我的另一个想法是,我可以检查一下该行是否为空,如果是这样,那就隐藏它?但这对我来说感觉有点脏。
哪些选项最好,如何在没有row
标签的情况下绕过检查/隐藏行?或者我需要重组整个表格吗? (可能高于我的能力。)
编辑:
@xild建议的showClass / hideClass rowClasses
如下所示:
即。相同但没有行之间的间断。
答案 0 :(得分:1)
如果您不想看到该物品,请不要放入您的藏品。
List<Users> usersAllowed= new ArrayList<Users>();
for (Users user : allUsers) {
if(condition){
usersAllowed.add(user);
}
}
并使用此列表显示在数据表中。
如果您不想这样做,您也可以将渲染设置为“h:column”。
<h:column rendered="#{(userAccount.userName == settings.user.userName)
|| settings.user.systemAdministrator}">
</h:column>
或者最后你可以使用dataTable的rowClasses参数。 如果您不想看到该行,请使用:
rowClasses="#{((userAccount.userName == settings.user.userName)
|| settings.user.systemAdministrator)) ? 'showClass' : 'hideClass'}"