如何呈现缓存在托管 bean 中的文件?
How can I render a file cached in a managed bean?
当前版本: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>
和托管 bean 本身:
public class MyBean{
private UploadedFile detailsImage;
public void uploadStartImage(){
//SETTING detailsImage here
}
//GET, SET, OTHER STUFF
}
我可以调用 UploadedFile::getData()
方法来检索二进制图像数据。但是我怎样才能将它渲染到网页中呢? value
属性应该分配给实际图片的 URL。所以看来我将不得不编写自己的 servlet...
问题:有没有一种方法可以避免编写 servlet 并直接从返回其二进制数据的托管 bean 方法中渲染图片?
更新:我需要执行此操作以显示上传图片的预览。也许还有另一种方法可以正确做到这一点?
您可以使用 <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)
当前版本: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>
和托管 bean 本身:
public class MyBean{
private UploadedFile detailsImage;
public void uploadStartImage(){
//SETTING detailsImage here
}
//GET, SET, OTHER STUFF
}
我可以调用 UploadedFile::getData()
方法来检索二进制图像数据。但是我怎样才能将它渲染到网页中呢? value
属性应该分配给实际图片的 URL。所以看来我将不得不编写自己的 servlet...
问题:有没有一种方法可以避免编写 servlet 并直接从返回其二进制数据的托管 bean 方法中渲染图片?
更新:我需要执行此操作以显示上传图片的预览。也许还有另一种方法可以正确做到这一点?
您可以使用 <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)