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?
<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>
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);
}
}