Setar valor de um bean em outro bean

5 respostas
vinicius.me

Boa noite!

Estou precisando de uma ajudinha, acho que bem simples de resolver.
Tenho 2 entidades Produto e ProdutoImagem, onde ProdutoImagem são imagens relacionadas a determinado produto.
A entidade ProdutoImagem possui 2 atributos, id e produto (que é do tipo Produto)…
O Problema: Não consigo setar o valor do atributo ProdutoImagem usando a entidade Produto.

Na jsp estava tentando setar usando de JSTL, sem sucesso :frowning:

<h:form id="uploadImagem" enctype="multipart/form-data">
                        <c:set var="#{produtoImagem.produtoImagem.produto}" value="#{produto.produto}" />
                        <t:inputFileUpload id="file" value="#{produtoImagem.imagem.uploadedFile}" />
                        <t:commandButton value="Salvar Imagem" action="#{produtoImagem.salvar}"/>
                    </h:form>

Pois quando em clico em um em Atualizar no DataModel da jsp em questao eu pego o Produto clicado

public String preparaAtualizar() {
        produto = (Produto) model.getRowData();
        atualizando = true;
        return "produtoRow_ok";
    } //seleciona produto da linha da tabela

Não sei se fui claro, mas to precisando atribuir o valo de um bean em outro, so que sem precisar digitar na JSP.

Não sei se ajuda mas estou usando JSF.

Obrigado.

5 Respostas

O

Bom, se eu entendi você tá precisando do updateActionListener:

<t:updateActionListener value="#{produtoImagem.produtoImagem.produto}" property="#{produto.produto}"/>
vinicius.me

Então, o que eu precisa é que o bean ProdutoImagem pegue o produto que esta armazenado no bean Produto, sem pecisar digitar na

Alguem tem alguma ideia?
Com JSTL não funciona ou não é uma boa prática?

Sera que no metodo preparaAtualizar do MB do Produto (ProdutoController.java) eu deva criar uma instancia da classe ProdutoImagem e talz?

Muia duvida?!!? :frowning:

Abraço aew

PS: o t:updateActionListener não funcionou : /

thimor

Tenta usar o codigo abaixo no seu backbean produto.

//Aqui voce vai usar para recuperar o BeanProdutoImagem
private Object getBeanController(Class classe) {
      FacesContext context = FacesContext.getCurrentInstance();
      return context.getELContext().getELResolver().getValue(context.getELContext(), null, classe.getSimpleName());
}

//Aqui voce vai usar para pegar o ProdutoImagemID do seu form.
private Object recuperarParametroDaTela(ActionEvent event, String objeto) {
      UIComponent comp = (UIComponent) event.getComponent();
      UIParameter param = (UIParameter) comp.findComponent(objeto);
      return param.getValue();
   }
//Aqui seria a associacao do produtoImagem ao produto
public void selecionaProdutoImagem(ActionEvent evento) {
      Integer produtoImagemID = (Integer) recuperarParametroDaTela(evento, "produtoImagemID");
      ProdutoImagemController produtoImagemBean = (ProdutoImagemController) getBeanController(ProdutoImagemController.class);
      produto.setProdutoImagemID(produtoImagemBean.findProdutoImagem(produtoImagemID));
   }

Lembrando que o método findProdutoImagem tem que esta implementado na classe ProdutoImagemController vou colocar como seria ele:

public ProdutoImagem findProdutoImagem(Integer id) {
     EntityManager em = getEntityManager();
     try {
         ProdutoImagem o = (ProdutoImagem) em.find(ProdutoImagem.class, id);
         return o;
     } finally {
         em.close();
     }
}

Para que voce consiga utilizar esse codigo tambem é necessário que as imagens ja estejam cadastradas pois voce precisa o ID delas. Caso nao consiga voce tera que implemtar uma action que faca isso a medida que voce vai adicionando as imagens, para no fim concluir o processo do seu cadastro. Na tabela onde estarao listadas as imagens no botao que vc colocar para adiciona-la ao produto tem que ter o seguinte parametro:

<h:commandLink value="Adicionar" actionListener="#{produto.selecionaProdutoImagem}">
    <f:param id="produtoImagemID"  value="#{imagem.produtoImagemID}" />
</h:commandLink>

pronto. espero que eu tenha ajudado.

rponte

Nada melhor que este artigo,

Abraços e boa sorte.

vinicius.me

Consegui usando o artigo que o rponte mando, mt bom o artigo…

Valeu galera, pela ajuda.

Criado 25 de junho de 2009
Ultima resposta 28 de jun. de 2009
Respostas 5
Participantes 4