【问题标题】:EL: cannot access property methodEL:无法访问属性方法
【发布时间】:2019-05-07 07:30:55
【问题描述】:

我的数据库中有一个名为“avatar”的 BLOB 字段,用于存储用户的照片。该字段在我的 JPA 实体中表示为 byte[]。我只想在数组具有正长度时渲染“头像”元素,但我从 javax.servlet.FilterChain.doFilter() 得到下一个异常:

“异常:未找到方法长度”

这是代码:

<o:graphicImage id="avatar" 
                value="#{loginView.user.avatar}" 
                dataURI="true"
                rendered="#{loginView.user.avatar.length()>0}"
 />

如果我检查支持 bean 的长度,将布尔值返回给 EL,它会工作并呈现图像,但我需要保持支持代码不变,这就是为什么我需要从我的 xhtml 进行检查。 谢谢。

edit:rendered="#{not empty loginView.user.avatar}" 不起作用,这就是我不得不转向另一个选项的原因。

【问题讨论】:

  • 'loginView.user.avatar.length() gt 0'怎么样?
  • "rendered="#{not empty loginView.user.avatar}" is not working"到底是怎么回事?这是正确的做法。也许您错误地在getAvatar() 中抛出异常,而不是仅仅返回null
  • getAvatar() 方法只是从表中使用 Netbeans 向导创建的实体自动生成的方法......它只返回一个字节 [],非常简单......让我感到困惑的是正如您所建议的那样,它可以在另一个项目中工作,但是对于这个项目,我不得不放松限制并继续采用与 Krzysztof 提供的想法非常相似的想法。不过我看不出有什么区别。

标签: jsf primefaces omnifaces


【解决方案1】:

尝试使用 JSTL。 Taglib 命名空间:

xmlns:fn="http://java.sun.com/jsp/jstl/functions"

用法:

<o:graphicImage id="avatar" 
            value="#{loginView.user.avatar}" 
            dataURI="true"
            rendered="#{fn:length(loginView.user.avatar) > 0}"/>

【讨论】:

    【解决方案2】:

    长度不是方法,而是数组的属性。尝试在 loginView bean 中创建一个方法,该方法将返回类似这样的内容。

    public boolean isAvatarLoaded() {
        return this.user.avatar.length > 0;
    }
    
    <o:graphicImage id="avatar" 
                    value="#{loginView.user.avatar}" 
                    dataURI="true"
                    rendered="#{loginView.isAvatarLoaded()}"
     />
    

    【讨论】:

    • 正如我在帖子末尾提到的,我尝试了您的建议,但要求不要更改 loginView 中的代码。感谢您以任何方式澄清长度()。
    猜你喜欢
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 2014-09-19
    • 2013-11-23
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多