使用richfaces 4上传文件时不重新渲染mediaOutput

时间:2014-08-27 22:23:49

标签: richfaces ajax4jsf rerender

我正在使用richfaces 4和JSF 2.1,特别是标签 rich:fileUpload a4j:mediaOutput 。我的目标是上传图片并进行预览。我有以下代码:

<rich:fileUpload id="upload" fileUploadListener="#{technicianBean.listener}" maxFilesQuantity="1" immediateUpload="true" ontyperejected="alert('Solo imágenes JPG');" acceptedTypes="jpg">

    <a4j:ajax event="uploadcomplete" render="info" />
    <a4j:ajax event="clear" listener="#{technicianBean.clearUploadData}" render="info" />

</rich:fileUpload>

<h:panelGroup id="info" layout="block" ajaxRendered="true" >
   <a4j:mediaOutput element="img" mimeType="image/jpeg" createContent="#{technicianBean.paint}"
     value="#{technicianBean.nickname}" style="width:100px; height:100px;" cacheable="false">
   </a4j:mediaOutput>
</h:panelGroup>

@ManagedBean
@SessionScoped
public class TechnicianBean extends PersonBean {

private String nickname;

private UploadedImage file;

public TechnicianBean() {
}

public String getNickname() {
    return nickname;
}

public void setNickname(String nickname) {
    this.nickname = nickname;
}

public UploadedImage getFile() {
    return file;
}

public void setFile(UploadedImage file) {
    this.file = file;
}


public void listener(FileUploadEvent event) throws IOException {
    UploadedFile photo = event.getUploadedFile();
    file = new UploadedImage();
    file.setLength(photo.getData().length);
    file.setName(photo.getName());
    file.setData(photo.getData());
}

public void paint(OutputStream stream, Object object) throws IOException {
    if (file != null) { 
        stream.write(file.getData());
        stream.close();
    }       
    //stream.write(((UploadedImage) object).getData());
}

 public String clearUploadData() {
     file = null;
     return null;
 } 
}   

我认为问题出现在 渲染 上的 a4j:ajax事件 标记中。例如,我在 a4j中的监听器(clearUploadData):ajax event =“clear” 执行该功能但在两种情况下( uploadcomplete > clear )我无法重新渲染图像(即内部带有mediaOutuput的panelGroup),当我删除或上传新图像时,即使刷新页面(F5),也会刷新任何内容。内容正确显示。

我真的不知道如何处理它。提前感谢您的兴趣。

PS: a4j:mediaOputut 标签中的(昵称)可能会让您感到困惑,但在paint函数中我正在流中写入文件属性。

0 个答案:

没有答案