我在本地网络中有一些图像文件,我想在JSF中的DataTable中显示它们。我正在使用JSF2.0和Tomahawk 1.1.13。下面是JSF代码。
<t:dataTable newspaperColumns="3" value="#{startupBean.colorList}" newspaperOrientation="horizontal" var="colorBO">
<f:facet name="spacer">
<f:verbatim></f:verbatim>
</f:facet>
<h:column>
<h:graphicImage id="colors" alt="jsf-sun" url="#{colorBO.color_url}">
</h:graphicImage>
</h:column>
</t:dataTable>
我在我的支持bean中将文件的路径设为“\\ root \ sub \ sub \ xxx.jpg”。但是当JSF页面呈现时,它会显示一个默认图标。当我右键单击图标并检查属性时,以下是我得到的内容。
http://localhost:8080/projname//root/sub/sub/xxx.jpg
我尝试在路径名中使用反斜杠和正斜杠。但是输出没有变化。我不知道http部分如何进入文件路径。我肯定错过了一些东西。
答案 0 :(得分:2)
你在这里犯了一个概念上的错误。 Web浏览器一旦遇到<img>
元素就必须通过有效且可访问的URL单独下载图像,而不是网页服务器必须以某种方式神奇地从HTML页面中的本地磁盘文件系统嵌入图像。返回到webbrowser。
您需要通过有效且可访问的URL使图像可用,以便webbrowser可以下载它。本地磁盘文件系统路径肯定不是有效且可访问的URL。更重要的是,如果服务器机器的本地磁盘文件系统内容自动完全暴露在万维网中,那将是一个巨大的安全漏洞。
解决此问题的最简单方法之一就是将图像放在公共webcontent(您的JSF文件也在那里),以便它可以在Web上使用。
另一种方法是配置服务器以将文件夹发布到Web中,以便特定URL也可以使用它。目前还不清楚你正在使用哪个服务器,所以这里只是一个Tomcat示例:
<Context docBase="/root/sub/sub" path="/images" />
这样,http://localhost:8080/images/xxx.jpg
可以使用该图片,然后这种<h:graphicImage>
方法可以正常运行:
<h:graphicImage src="/images/xxx.jpg" />