将图像从本地网络显示到JSF Web应用程序

时间:2012-08-23 04:40:21

标签: networking jsf-2 datatable local

我在本地网络中有一些图像文件,我想在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部分如何进入文件路径。我肯定错过了一些东西。

1 个答案:

答案 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" />

另见: