如何在PrimeFaces中的<p:graphicimage>上显示替代文本?</p:graphicimage>

时间:2013-11-22 18:11:48

标签: jsf primefaces jsf-2.2 graphicimage

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


当图片名称为空时,name的{​​{1}}属性将评估为<p:graphicImage>。在这种情况下,只是将页面留空而没有任何错误,它不起作用。

如果条件表达式中的name=" "被删除,则会导致&nbsp;被抛出。

那么,如果要显示的图像不可用,如何在java.lang.StringIndexOutOfBoundsException上显示替代文字?

1 个答案:

答案 0 :(得分:3)

  

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

确实,转载它。这在技术上是PrimeFaces'GraphicImageRenderer中的一个错误。在第70行,它应该在尝试将其作为资源之前完成if(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}" />