我在WAR中打包了一组图像,并使用<p:dataGrid>
在<p:graphicImage>
中对其进行描述。图像位于/resources/icons
文件夹中。我希望能够在提交时选择图像并将此图像的副本保存到磁盘。
如何做到这一点?如何获得此图像的引用(InputStream
或其他)?
答案 0 :(得分:2)
鉴于此文件夹结构,
YourProject |-- src | `-- com | `-- example | `-- BackingBean.java |-- WebContent | |-- META-INF | |-- WEB-INF | |-- resources | | `-- icons | | `-- foo.png | `-- foo.xhtml :
你可以通过ExternalContext#getResourceAsStream()
得到它,它采用webcontent-relative路径:
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
InputStream input = externalContext.getResourceAsStream("/resources/icons/foo.png");
// ...
或Resource#getInputStream()
其中Resource
来自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}" />