如何将参数传递给渲染属性?

Kha*_*bed 1 jsf el primefaces

我尝试将参数传递给方法管理员,如下所示:

<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>
Run Code Online (Sandbox Code Playgroud)

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

public boolean isAdmin(String role){
          FacesContext facesContext = FacesContext.getCurrentInstance();
          HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
          return request.isUserInRole("admin");                
          }
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 5

rendered="#{loginBean.admin('dataread'}"
Run Code Online (Sandbox Code Playgroud)

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

总而言之,这应该做到:

rendered="#{loginBean.isAdmin('dataread')}"
Run Code Online (Sandbox Code Playgroud)

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

rendered="#{request.isUserInRole('admin')}"
Run Code Online (Sandbox Code Playgroud)