1

我正在显示<p:graphicImage>存储在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指的是存储在 ajava.util.List<Entity>中的 JPA 实体对象,该对象在迭代 a 时被检索<p:dataTable>


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

如果&nbsp;在条件表达式中被删除然后,它会导致java.lang.StringIndexOutOfBoundsException被抛出。

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

4

1 回答 1

3

如果&nbsp;在条件表达式中被删除然后,它会导致java.lang.StringIndexOutOfBoundsException被抛出

确实,转载了。从技术上讲,这是 PrimeFaces 中的一个错误GraphicImageRenderer。在第 70 行,它应该在尝试将其作为资源获取之前执行aif(name != null && !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}" />
于 2013-11-22T18:21:12.333 回答