【问题标题】:How to render <p:graphicImage> conditionally depending on if the resource exists如何根据资源是否存在有条件地渲染 <p:graphicImage>
【发布时间】:2014-08-29 14:15:23
【问题描述】:

如何仅在资源 URL 有效的情况下呈现 &lt;p:graphicImage&gt;

<p:graphicImage url="#{resource['images/image.png']}" />

基本上,我只想在#{resource['images/image.png']} 实际存在时才渲染我的graphicImage。我怎样才能验证这一点?我尝试关注this JavaScript example,但没有成功。

【问题讨论】:

    标签: jsf graphicimage


    【解决方案1】:

    检查ResourceHandler#createResource() 是否不返回null

    <p:graphicImage name="images/image.png" rendered="#{not empty facesContext.application.resourceHandler.createResource('images/image.png')}"/>
    

    请注意,我将url="#{resource['resourceName']}" 替换为更简单的name="resourceName"

    【讨论】:

    • 非常感谢@BalusC
    • BalusC,很抱歉打扰你,但我本地机器上的这段代码运行良好,但是当它运行时会抛出 org.apache.el.parser.ParseException javax.servlet 异常。 ServletException: /component/controls/myprofile.xhtml @20,207 渲染="#{not empty facesContext.application.resourceHandler.createResource('images/image.png')}" 错误解析:#{not empty facesContext.application.resourceHandler。 createResource('images/image.png')} javax.faces.webapp.FacesServlet.service(FacesServlet.java:606) 根本原因你知道为什么我会得到这个异常吗?谢谢
    • 显然您的开发环境版本与目标环境的版本不匹配。仅自 EL 2.2 起才支持此功能。你可以安装 JBoss EL 让它在 EL 2.1 上运行。另请参阅 stackoverflow.com/questions/3284236/… 不仅如此,您应该真正在开发和生产中调整 API 版本。
    • 对于我的问题,EL 2.2 以前的版本还有另一个“解决方案”,或者最好是请求升级到目标环境?非常感谢@BalusC 的及时回复和热心帮助!
    • 在ImageServlet使用渲染外部文件的情况下,能否使用EL检查现有图像?
    【解决方案2】:

    我不使用 url,而是名称和库的组合...

    这对我有用....希望它有所帮助

    <h:dataTable id="image" value="#bb.getCurrentBorrowerImage(history.borrower_id)}" var="i" >
    <h:column rowHeader="">
    <h:graphicImage name="#{i.imageFileName}" library="borrower_images" alt="Item Image"   height="100" width="100" rendered="#{!empty i.imageFileName}"/>
    </h:column>
    

    【讨论】:

    • 如何防止文件不存在或名称拼写错误?
    猜你喜欢
    • 2021-04-06
    • 2021-02-04
    • 2017-02-22
    • 1970-01-01
    • 2022-01-22
    • 2022-01-10
    相关资源
    最近更新 更多