【发布时间】:2014-02-28 16:41:09
【问题描述】:
我正在尝试更改现有数据表(由以前的开发人员编写),以便在以系统管理员身份登录时可以看到整个表,但如果以其他人身份登录,则只能看到您自己的详细信息。
我已经尝试通过将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/not render 整行但是数据表是由列而不是行生成的,所以我看不到如何添加它。即使添加<c:if>,我也需要在行周围添加它,所以当它按列生成时,我不知道该怎么做。
我的另一个想法是我可以检查该行是否为空,如果是则隐藏它?但这对我来说有点肮脏。
这些选项中哪一个是最好的,我如何在没有row 标签的情况下绕过检查/隐藏行?还是我需要重组整个表格? (可能超出我的能力范围。)
编辑:
@xild 建议的 showClass/hideClass rowClasses 如下所示:
即相同,但没有行之间的中断。
【问题讨论】:
-
在支持 bean 中提供瞬态属性是一种选择吗?恕我直言,我会在
userBean中创建一个userVisibleAccounts字段,其中仅包含当前用户可以访问的信息。