如何呈现托管bean中缓存的文件?

时间:2015-04-09 11:19:35

标签: jsf jsf-2 richfaces

当前版本: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的方法渲染图片,返回其二进制数据?

更新:我需要这样做以显示上传图片的预览。也许有另一种方法可以正确地做到这一点?

1 个答案:

答案 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