java - 如何获取公共(public)网页内容资源的InputStream?

标签 java jsf primefaces

我在 WAR 中打包了一组图像,并在 <p:dataGrid> 中描绘了它们。使用<p:graphicImage> 。图像位于 /resources/icons文件夹。我希望能够选择一个图像并在提交时将该图像的副本保存到磁盘。

如何做到这一点?我如何获得此图像的引用(InputStream或其他)?

最佳答案

鉴于此文件夹结构,

YourProject
 |-- src
 |    `-- com
 |         `-- example
 |              `-- BackingBean.java
 |-- WebContent
 |    |-- META-INF
 |    |-- WEB-INF
 |    |-- resources
 |    |    `-- icons
 |    |         `-- foo.png
 |    `-- foo.xhtml
 :

You can get it by either ExternalContext#getResourceAsStream() which takes webcontent-relative path:

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
InputStream input = externalContext.getResourceAsStream("/resources/icons/foo.png");
// ...

或者通过Resource#getInputStream()其中资源是从ResourceHandler#createResource()获取的它采用 /resources 相对路径:

ResourceHandler resourceHandler = FacesContext.getCurrentInstance().getApplication().getResourceHandler();
InputStream input = resourceHandler.createResource("icons/foo.png").getInputStream();
// ...

至于选择图像并传递其路径,只需执行如下操作:

<h:graphicImage name="icons/foo.png">
    <f:ajax event="click" listener="#{bean.setImage(component.name)}" />
</h:graphicImage>
<h:graphicImage name="icons/bar.png">
    <f:ajax event="click" listener="#{bean.setImage(component.name)}" />
</h:graphicImage>
<h:commandButton value="submit" action="#{bean.saveImage}" />

另请参阅:

关于java - 如何获取公共(public)网页内容资源的InputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8931902/

相关文章:

css - 设置 p :panel 的背景图像

javascript - 如何添加指向 <p :submenu>? 的链接

java - Spring JMS订阅者无法接收消息?

java - JScrollPane中的JTextArea, View 坐标平移

jsf - 将焦点放在已部分渲染的元素上

jsf - facelet自定义标签的参数化

css - primefaces 数据表中的多个彩色行?

java - 不能将 A[T] 隐式转换为 AT,其中 A[T] 扩展 AT

java - 需要在网络服务中使用自定义类而不是生成(由 wsimport)

java - 在 JSF bean 中获取请求 URL?