Не перерисовывать mediaOutput при загрузке файла с помощью richfaces 4

Я использую 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 event на render. Например, мой слушатель (clearUploadData) в a4j:ajax event="clear" выполняет функцию, но в обоих случаях (uploadcomplete и clear) я не могу перерендерить изображение (то есть группу panelGroup с mediaOutuput внутри), и когда я удаляю или загружаю новое изображение, все обновляется, даже если я обновляю страницу (F5) содержание показано правильно.

Я действительно не знаю, как с этим бороться. Заранее благодарим за проявленный интерес.

PS: значение (псевдоним) в теге a4j:mediaOputut может вас смутить, но в функции рисования я пишу в потоке атрибут файла.


person Enric    schedule 27.08.2014    source источник
comment
можно попробовать решение здесь? кажется, что в этом случае это не работает, но я много раз видел, как это работает. stackoverflow.com/questions/24591407/   -  person tt_emrah    schedule 28.08.2014
comment
См. мой ответ здесь: stackoverflow.com/a/31395282/460557 Возможно, это поможет вам решить вашу проблему, если это поможет, не не забудьте проголосовать ;)   -  person Jorge Campos    schedule 14.07.2015