byte [] imageInByte = event.getFile().getContents();
InputStream in = new ByteArrayInputStream(imageInByte);
try {
BufferedImage bImageFromConvert = ImageIO.read(in);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}我们是否可以将bImageFromConvert值带入<h:graphicImage />,或者在获得BufferedImage之前还有其他步骤才能在<h:graphicImage value="?"/>内部显示
发布于 2013-05-18 00:25:20
不幸的是,这里还没有通用的解决方案。但是通过检测ResourceHandler,你可以以官方的方式实现这一点(从JSF2开始):
public class TestResourceHandler extends ResourceHandlerWrapper {
public static final class TestResource extends Resource {
@Override
public InputStream getInputStream() throws IOException {
return null;
}
@Override
public Map<String, String> getResponseHeaders() {
return new HashMap<>();
}
@Override
public String getRequestPath() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().getViewHandler().getResourceURL(
context, "/faces" + RESOURCE_IDENTIFIER + "/test.gif?ln=test");
}
@Override
public URL getURL() {
return null;
}
@Override
public boolean userAgentNeedsUpdate(FacesContext context) {
return true;
}
}
private ResourceHandler wrapped;
public TestResourceHandler(ResourceHandler wrapped) {
this.wrapped = wrapped;
}
@Override
public ResourceHandler getWrapped() {
return wrapped;
}
@Override
public Resource createResource(String resourceName, String libraryName) {
if ("test".equals(libraryName))
return new TestResource();
return super.createResource(resourceName, libraryName);
}
@Override
public boolean libraryExists(String libraryName) {
if ("test".equals(libraryName))
return true;
return super.libraryExists(libraryName);
}
@Override
public void handleResourceRequest(FacesContext context) throws IOException {
String library = context.getExternalContext().getRequestParameterMap().get("ln");
if ("test".equals(library)) {
BufferedImage image = ImageIO.read(getClass().getResource("/info.png"));
context.getExternalContext().setResponseContentType("image/gif");
ImageIO.write(image, "gif", context.getExternalContext().getResponseOutputStream());
context.responseComplete();
} else {
wrapped.handleResourceRequest(context);
}
}
}并在faces-config.xml中注册:
<faces-config>
<application>
...
<resource-handler>com.intersult.test.util.TestResourceHandler</resource-handler>
</application>
...
</faces-config>通过/faces/javax.faces.resource/test.gif?ln=test或
该解决方案既可以在应用程序本身中工作,也可以在基础应用程序WAR中包含的任何JSF库中工作。
发布于 2016-06-21 16:27:36
另一种解决方法是使用Base64图像编码,例如采用以下方式:
byte[] imageBytes = Files.readAllBytes(myFile.toPath());
this.myImageBase64 = "data:" + contentType + ";base64," + DatatypeConverter.printBase64Binary(imageBytes);(此代码需要Java 7)
然后在经典的超文本标记语言<img>标签上使用它:
<img src="${myBean.myImageBase64}" alt="" />https://stackoverflow.com/questions/16612681
复制相似问题