我最近在我的JSF页面中添加了<p:galleria>
,如PrimeFaces展示中所示。
代码正在执行而没有任何错误,但它不显示任何图像。我认为这是由于图像的路径格式不正确。这是怎么造成的,我该如何解决?
index.xhtml
<p:galleria value="#{compa.images}" var="image" panelWidth="1570" panelHeight="250" showCaption="true">
<p:graphicImage value="resource/images/#{image}" name="COMPANY CREATION"/>
</p:galleria>
compa.java
public void init() {
images = new ArrayList<String>();
for(int i=1;i<=10;i++) {
images.add("resource/images" + i + ".jpg");
}
}
IDE中的图像路径为ps\build\web\resource\images
。
答案 0 :(得分:6)
首先,JSF在这个问题的上下文中只是一个HTML代码生成器。在HTML中,图像由<img>
元素表示,其src
属性应指向(相对)URL,webbrowser可以从中单独下载图像。您是否通过在webbrowser中打开JSF页面并右键单击查看源来检查生成的HTML输出?生成的<img>
元素看起来是否正常?可能没有。
您使用name
属性的方式不正确。
<p:graphicImage value="resource/images/#{image}" name="COMPANY CREATION"/>
name
属性表示“资源名称”。它基本上是资源的路径,相对于/resources
文件夹。此属性优先于value
属性。所以基本上你正在尝试创建
<img src="COMPANY CREATION" />
这是不对的。相反,JSF会自动生成RES_NOT_FOUND
URL。您应该在生成的HTML输出中看到它。
如果您的意图是将“公司创建”显示为工具提示,那么正确的方法是
<p:graphicImage name="images/#{image}" title="COMPANY CREATION" />
或者,如果您坚持使用value
属性,该属性采用上下文相关URL而不是资源名称:
<p:graphicImage value="/resources/images/#{image}" title="COMPANY CREATION" />