【问题标题】:How to pass a parameter into rendered attribute?如何将参数传递给渲染属性?
【发布时间】:2012-05-23 19:19:44
【问题描述】:

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

<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");                
          }

【问题讨论】:

    标签: jsf primefaces el


    【解决方案1】:
    rendered="#{loginBean.admin('dataread'}"
    

    你有缺少 ) 的 EL 语法错误,导致该值未被识别为 EL 表达式,因此被视为普通字符串,在 rendered 属性中默认为布尔值@ 987654324@。此外,当指定像#{bean.method()} 这样的操作表达式而不是像#{bean.property} 这样的值表达式时,您应该指定完整的方法名称,因此是isAdmin() 而不是admin()

    总而言之,应该这样做:

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

    与具体问题无关HttpServletRequest 已经在 EL 范围内由 #{request} 提供,因此这也应该不需要支持 bean 样板:

    rendered="#{request.isUserInRole('admin')}"
    

    【讨论】:

      【解决方案2】:

      正确的语法

      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 中传递参数的教程的更多信息:

      【讨论】:

        猜你喜欢
        • 2015-12-30
        • 1970-01-01
        • 1970-01-01
        • 2012-03-15
        • 2018-11-18
        • 1970-01-01
        • 2011-11-11
        • 2011-10-13
        • 1970-01-01
        相关资源
        最近更新 更多