如何在JSF/IceFaces中启用/禁用组件?

3
我正在寻找如何基于用户登录启用和禁用icefaces组件的方法?
例如: 如果以管理员身份登录,我需要启用更多组件,如果以用户身份登录,则需要禁用某些组件并在一个页面上添加其他组件。如何在jsf / icefaces中实现此功能?
这两个组件在一个页面上启用和禁用。
感谢您的建议。
2个回答

12

使用rendered属性,它接受一个布尔表达式。在User实体中添加一个方法,如isAdmin()getRole(),并让rendered属性拦截该方法。

<h:someComponent rendered="#{user.admin}">
    Will be displayed when user.isAdmin() returns true.
</h:someComponent>
<h:someComponent rendered="#{user.role != 'ADMIN'}">
    Will be displayed when user.getRole() (String or enum) does not equal ADMIN.
</h:someComponent>

如果您感兴趣,这里有一些更多的例子,展示如何在EL中使用布尔表达式。

JSP兼容的语法:

<h:someComponent rendered="#{bean.booleanValue}" />
<h:someComponent rendered="#{bean.intValue > 10}" />
<h:someComponent rendered="#{bean.objectValue == null}" />
<h:someComponent rendered="#{bean.stringValue != 'someValue'}" />
<h:someComponent rendered="#{!empty bean.collectionValue}" />
<h:someComponent rendered="#{!bean.booleanValue && bean.intValue != 0}" />
<h:someComponent rendered="#{bean.enumValue == 'ONE' || bean.enumValue == 'TWO'}" />

支持Facelets语法,但更改了一些对XML敏感的EL运算符,如>&

<h:someComponent rendered="#{bean.booleanValue}" />
<h:someComponent rendered="#{bean.intValue gt 10}" />
<h:someComponent rendered="#{bean.objectValue eq null}" />
<h:someComponent rendered="#{bean.stringValue ne 'someValue'}" />
<h:someComponent rendered="#{not empty bean.collectionValue}" />
<h:someComponent rendered="#{not bean.booleanValue and bean.intValue ne 0}" />
<h:someComponent rendered="#{bean.enumValue eq 'ONE' or bean.enumValue eq 'TWO'}" />

1
JSF2不再允许使用&&,因为它会给我这个错误信息:The entity name must immediately follow the '&' in the entity reference。然而,如果我使用关键字and,那么它就可以工作了。 - Thang Pham
1
@Harry:哦,抱歉,那是JSP风格。在XML(XHTML,Facelets)中,您需要转义XML实体。 是其中之一。是的,“and”是正确的关键字。至于剩余部分,这里有一个概述 - BalusC
@ThankPharm 抱歉,您的第一条评论是什么意思?使用 && 不允许吗? - Koray Tugay

1
在ICEfaces中,对于具有禁用属性的控件,请使用以下内容:
<ice:inputText disabled="[true/false]"/>

例子

我在我的代码中使用了这个:

<ice:inputText disabled="#{ABMUsuario.accion!='3'}"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接