2

我尝试像这样将参数传递给方法 admin:

<p:toolbarGroup align="right" rendered="#{loginBean.admin('dataread'}">
                            <h:form>
                                <p:commandButton value="manage users" ajax="false"
                                                 icon="ui-icon-document" action="/admin/manageUsers.xhtml?faces-redirect=true"/>
                            </h:form>
                        </p:toolbarGroup>

我的托管 Bean 中的代码是这样的

public boolean isAdmin(String role){
          FacesContext facesContext = FacesContext.getCurrentInstance();
          HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
          return request.isUserInRole("admin");                
          }
4

2 回答 2

5
rendered="#{loginBean.admin('dataread'}"

您在那里缺少)一个 EL 语法错误,这会导致该值未被识别为 EL 表达式,因此被视为普通的香草字符串,该字符串将在rendered属性中默认为 boolean true。此外,当指定 action 表达式#{bean.method()}而不是 value 表达式#{bean.property}时,您应该指定完整的方法名称,因此isAdmin()而不是admin().

总而言之,这应该这样做:

rendered="#{loginBean.isAdmin('dataread')}"

与具体问题无关HttpServletRequest, EL 范围中已经可以使用#{request},所以这也应该不需要支持 bean 样板:

rendered="#{request.isUserInRole('admin')}"
于 2012-05-23T21:30:15.290 回答
1

正确的语法

rendered="#{loginBean.isAdmin('dataread')}">

代替

rendered="#{loginBean.admin('dataread'}"

确保您的 EL 支持此类功能

 <dependency>
      <groupId>org.glassfish.web</groupId>
      <artifactId>el-impl</artifactId>
      <version>2.2</version>
 </dependency>

查找包含有关在 JSF 中传递参数的教程的更多信息:

于 2012-05-23T21:30:45.873 回答