我在 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/