【问题标题】:How to display alternate text on <p:graphicImage> in PrimeFaces?如何在 PrimeFaces 中的 <p:graphicImage> 上显示替代文本?
【发布时间】:2013-12-07 17:40:01
【问题描述】:

我在&lt;p:graphicImage&gt; 上显示图像,这些图像存储在webroot\resources\fileUpload\product_image\thumb 目录下,如下所示。

<p:graphicImage library="fileUpload" 
                name="#{not empty row.prodImage?'product_image/thumb/':'&nbsp;'}#{row.prodImage}" 
                alt="#{row.prodName}"/>

row 指的是存储在 java.util.List&lt;Entity&gt; 中的 JPA 实体对象,该对象在迭代 &lt;p:dataTable&gt; 时被检索。


当图像名称为空时,&lt;p:graphicImage&gt;name 属性被评估为name=" "。在这种情况下,将页面留空而没有任何错误是行不通的。

如果条件表达式中的&amp;nbsp; 被删除,则会导致java.lang.StringIndexOutOfBoundsException 被抛出。

那么,如果要显示的图像不可用,如何在&lt;p:graphicImage&gt; 上显示替代文本?

【问题讨论】:

    标签: jsf primefaces jsf-2.2 graphicimage


    【解决方案1】:

    如果条件表达式中的&amp;nbsp;被删除,那么会导致java.lang.StringIndexOutOfBoundsException被抛出

    确实,复制了它。这在技术上是 PrimeFaces 的GraphicImageRenderer 中的一个错误。在第 70 行,它应该在尝试将其作为资源获取之前执行 if(name != null &amp;&amp; !name.isEmpty()) 而不是单独的 name != null

    我不确定他们是否值得修复它,因为指定一个空的 name 实际上没有意义,而且通过有条件地渲染两个图像来解决这个问题相对容易,一个没有名称,另一个有名称:

    <p:graphicImage alt="#{row.prodName}" rendered="#{empty row.prodImage}" />
    <p:graphicImage library="fileUpload" name="product_image/thumb/#{row.prodImage}" alt="#{row.prodName}" rendered="#{not empty row.prodImage}" />
    

    【讨论】:

      猜你喜欢
      • 2023-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 2011-10-13
      相关资源
      最近更新 更多