1

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

4

1 回答 1

2

你在这里犯了一个概念上的错误。网络浏览器必须在遇到<img>元素时通过有效且可访问的 URL 单独下载图像,而不是网络服务器必须以某种方式将本地磁盘文件系统中的图像神奇地嵌入到返回给网络浏览器的 HTML 页面中.

您需要通过有效且可访问的 URL 使图像可用,以便网络浏览器可以下载它。本地磁盘文件系统路径肯定不是有效且可访问的 URL。更重要的是,如果服务器机器的本地磁盘文件系统内容自动完全暴露在万维网中,这将是一个巨大的安全漏洞。

解决此问题的最简单方法之一就是将图像放在公共 Web 内容中(您的 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" />

也可以看看:

于 2012-08-23T11:45:20.713 回答