当前版本:JSF 2.1,RichFaces 4.5.2
我遇到了以下问题: 我的一个网页中有一个上传组件,它将上传图像:
<h:graphicImage id="uploadedPict" value="__WHAT__?" alt="picture />
<rich:fileUpload id="imageStartUploadComponent"
fileUploadListener="#{MyBean.uploadStartImage}"
acceptedTypes="png,jpg"
immediateUpload="false">
<a4j:ajax event="uploadcomplete" render="uploadedPict" />
</rich:fileUpload>
和manged bean本身:
public class MyBean{
private UploadedFile detailsImage;
public void uploadStartImage(){
//SETTING detailsImage here
}
//GET, SET, OTHER STUFF
}
我可以调用UploadedFile::getData()
方法来检索二进制图像数据。但是如何将其呈现到网页中呢? value
属性应该被赋予实际图片的URL。所以我似乎必须编写自己的servlet ......
问题:有没有办法避免编写servlet并从托管bean的方法渲染图片,返回其二进制数据?
更新:我需要这样做以显示上传图片的预览。也许有另一种方法可以正确地做到这一点?
答案 0 :(得分:1)
您可以使用<a4j:mediaOutput>
:
<a4j:mediaOutput element="img" mimeType="image/jpeg"
createContent="#{bean.paint}" value="#{bean.file}">
</a4j:mediaOutput>
和绘画方法:
public void paint(OutputStream stream, Object object) throws IOException {
stream.write(((UploadedFile) object).getData());
stream.close();
}
(查看showcase example)