Ajuda com a4j:support

0 respostas
L

Olá Galera!
Numa parte do meu sistema tenho um banco de imagens que o usuario deve escolher uma. Inicialmente o banco possui uma unica imagem salva (id=1) e ele pode adicionar novas imagens ao banco e depois selecionar qual a que deve ser mostrada no resto do sistema.
Quanto ao cadastro e seleção tá tudo tranquilo, meu problema é apenas na pre-visualização da figura escolhida, feita no componente de id="icone", ao levantar o sistema ele mostra a figura padrão (id=1) corretamente, consigo dar upload de quantas imagens quiser, se selecionar qualquer uma delas o icone é atualizado corretamente para a imagem selecionada, porém apenas uma vez. O onclick do a4j:support só é disparado uma única vez, a não ser que eu coloque action="submit()", ai funciona todas as vezes porem renderizando tudo e não é o que quero.
Alguém tem alguma idéia do que possa ser?

Meu jsp:
<f:view>
    <h:form>
        <h:outputText value="Logotipo  : "/>
        <a4j:mediaOutput element="img" createContent="#{ImagensMB.montarImagem}" id="icone"/>
        <h:selectOneRadio layout="pageDirection" value="#{ImagensMB.imagemId}" id="lista">
            <a4j:support event="onclick" reRender="icone"/>
            <f:selectItems value="#{ImagensMB.imagens}"/>
        </h:selectOneRadio>
        <rich:fileUpload fileUploadListener="#{ImagensMB.uploadListener}" autoclear="true"
                         acceptedTypes="jpg, gif, png, bmp" immediateUpload="true"
                         addControlLabel="Adicionar..." listHeight="0" id="upload"
                         listWidth="0">
            <a4j:support event="onuploadcomplete" reRender="lista,upload"/>
        </rich:fileUpload>
        <h:commandButton value="OK" actionListener="#{ImagensMB.ok}"/>
    </h:form>
</f:view>
Meu managed bean (escopo session):
public class ImagensBean {

    public List<SelectItem> getImagens() {
        List<SelectItem> imagens = new ArrayList<SelectItem>();
        for (Imagem i : new NegocioImagens().listarImagens())
            imagens.add(new SelectItem(i.getId(), i.getNome()));
        return imagens;
    }

    private Imagem imagem = new NegocioImagens().getImagem(1)

    public void montarImagem(OutputStream stream, Object object) throws IOException{
        stream.write(imagem.getBytes());
    }

    public Long getImagemId(){
        return imagem.getId();
    }

    public void setImagemId(Long id){
        imagem = new NegocioImagens().getImagem(id);
    }

    public void ok(ActionEvent evt){
        new NegocioImagens().salvarImagemEscolhida(imagem);
    }
    
    public void uploadListener(UploadEvent event) {
        UploadItem arquivo = event.getUploadItem();
        Imagem novaImagem = new Imagem();
        novaImagem.setBytes(arquivo.getData());
        int extensao = arquivo.getFileName().lastIndexOf('.');
        novaImagem.setNome(arquivo.getFileName().substring(0, extensao));
        new NegocioImagens().adicionar(novaImagem);
    }

}
Obrigado!
Criado 19 de julho de 2010
Respostas 0
Participantes 1