Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 有条件地呈现a中的行<;h:数据表>;_Html_Jsp_Jsf_Jsp Tags - Fatal编程技术网

Html 有条件地呈现a中的行<;h:数据表>;

Html 有条件地呈现a中的行<;h:数据表>;,html,jsp,jsf,jsp-tags,Html,Jsp,Jsf,Jsp Tags,我正在尝试更改一个现有的数据表(由以前的开发人员编写),以便您在以sysadmin身份登录时可以看到整个表,但在以其他人身份登录时只能看到您自己的详细信息 我尝试通过向表中的每个值添加rendered标记来实现这一点。这让我看到,我的检查工作,并得到基本的测试工作。代码的该部分按预期运行。但是,有一个明显的缺陷,即无论是否填充,都会生成额外的行 这是我的密码: <h:dataTable value="#{userBean.users}" var="userAccount"

我正在尝试更改一个现有的数据表(由以前的开发人员编写),以便您在以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时,它(可预测地)输出如下内容:

生成所有行,但仅为当前用户填写

我理解它为什么这样做,但我不知道如何让它做我想让它做的事情。这就像我想
渲染
/not
渲染
整行一样,但是数据表是由column not row生成的,所以我看不出如何添加它。即使添加一个
,我也需要在行的周围添加它,所以当它由列生成时,我不知道如何才能做到这一点

我的另一个想法是,我可以检查行是否为空,如果是,则隐藏它?但我觉得有点脏

这些选项中哪一个最好?在没有
标记的情况下,如何绕过检查/隐藏行?还是我需要重组整个桌子?(可能超出我的能力。)


编辑:

@xild建议的showClass/hideClass
rowClasses
如下所示:


i、 e.相同,但行与行之间没有分隔符。

如果您不想看到对象,请不要将其放入收藏中

List<Users> usersAllowed= new ArrayList<Users>();
for (Users user : allUsers) {
    if(condition){
       usersAllowed.add(user); 
    }
}

在支持bean中提供瞬态属性是一种选项吗?我想在
userBean
中创建一个
userVisibleAccounts
字段,该字段只保存当前用户可以访问的信息。
按列呈现(因此,适用于所有行),而不是按行呈现。不过,第一个和第三个建议是可以的。同意
一个建议。我猜您建议的最后一个是替换现有的
行类
?我试过了,它产生了相同的输出,但行之间没有行(将编辑问题以包含另一个屏幕截图)。在问号之前是否有不必要的结束括号?还是应该在开放支架之前有一个开放支架?
    <h:column rendered="#{(userAccount.userName == settings.user.userName)
                                       || settings.user.systemAdministrator}">
    </h:column>
  rowClasses="#{((userAccount.userName == settings.user.userName)
                                   || settings.user.systemAdministrator)) ? 'showClass' : 'hideClass'}"