我正在尝试使用 ap:dataGrid 内的 p:graphicImage 显示 webapp 文件夹外部文件夹中的图像,但它不起作用。但是我希望使用 URL 的图像在另一个网站上显示它们。这是我尝试过的:
<!--works-->
<p:graphicImage value="#{imageStreamer.getStreamedImage(fileManagerBean.resources.get(0))}" width="100"/>
<!--does'nt work-->
<p:dataGrid id="dataGrid" var="file" value="#{fileManagerBean.resources}" >
<p:commandLink action="#{fileManagerBean.setFicher(file)}" onclick="dialog.show();" update=":img,:url">
<p:graphicImage value="#{imageStreamer.getStreamedImage(file)}" width="100"/><br/>
<h:outputText value="#{file.name}" />
</p:commandLink>
</p:dataGrid>
文件清单:
public List<File> getResources() {
String path = "/opt/www/images";
File resourceDirectory = new File(path);
String[] extensions = {"png", "jpg", "jpeg", "gif"};
Collection<File> files = FileUtils.listFiles(resourceDirectory, extensions, true);
// ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
// Set<String> resources = context.getResourcePaths("/images");
List<File> resources = new ArrayList<File>();
for (File resource : files) {
resources.add(resource);
}
return resources;
}
图像流媒体:
@ManagedBean
@ApplicationScoped
public class ImageStreamer {
public StreamedContent getStreamedImage(File file) {
InputStream stream = null;
String mimeType = null;
try {
stream = new FileInputStream(file);
mimeType = URLConnection.guessContentTypeFromStream(stream);
} catch (FileNotFoundException ex) {
Logger.getLogger(ImageStreamer.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(ImageStreamer.class.getName()).log(Level.SEVERE, null, ex);
}
return new DefaultStreamedContent(stream, mimeType, file.getName());
}
}