【问题标题】:Displaying an image from Local Network to JSF Web Application将图像从本地网络显示到 JSF Web 应用程序
【发布时间】:2012-08-18 13:36:55
【问题描述】:

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

【问题讨论】:

  • 能否请您更准确一点:呈现的&lt;img&gt; 标记是什么样的?您希望它是什么样的。

标签: networking jsf-2 datatable local


【解决方案1】:

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

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

解决此问题的最简单方法之一就是将图像放在公共 Web 内容中(您的 JSF 文件也在那里),以便它在 Web 中可用。

另一种方法是配置服务器以将文件夹发布到网络上,这样它也可以通过特定的 URL 访问。不清楚您使用的是哪个服务器,所以这里只是一个 Tomcat 示例:

<Context docBase="/root/sub/sub" path="/images" />

这样http://localhost:8080/images/xxx.jpg 可以使用图像,然后&lt;h:graphicImage&gt; 方法应该可以工作:

<h:graphicImage src="/images/xxx.jpg" />

另见:

【讨论】:

  • 感谢 BalusC!我正在使用tomcat,您的解决方案对我有用。感谢您抽出宝贵时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2011-03-20
  • 1970-01-01
  • 2023-01-22
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多