Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

12
respostas

Metodo Alterar

Estou criando um método alterar da seguinte forma:

public String alterar(Canal canal){
        this.canal = canal;
        System.out.println("[CANAL DAO]: Preparando Edição Registro");
        System.out.println("[CANAL DAO]: Canal: "+ this.canal.getIdCanal() + " " + this.canal.getNmCanal() + " - " + this.canal.getEmailAcesso());
        return "/canal/cadastra";
    }}

No entanto ao abrir a pagina de cadastra, não traz os campos preenchidos. O que posso estar fazendo?

12 respostas

Oi Guilherme,

Como está a sua view de alterar? E de que forma está o link para essa action nova?

A chamada para o metodo alterar é o seguinte:

<h:column>
                    <f:facet name="header">Alterar</f:facet>
                    <h:commandLink value="Alterar" action="#{canalBean.alterar(canal)}" />
                </h:column>

O meu xhtml, está da seguinte forma:

<h:form>
        <h:panelGrid columns="2">
            <h:outputLabel value="Nome:" for="nmCanal" />
            <h:inputText id="nmCanal" value="#{canalBean.canal.nmCanal}" />
            <h:outputLabel value="E-mail Contato:" for="emailAcesso" />
            <h:inputText id="emailAcesso" value="#{canalBean.canal.emailAcesso}" />
            <h:commandButton value="Salvar" action="#{canalBean.gravar}" />
        </h:panelGrid>
    </h:form>

Chamada:

<h:column>
                    <f:facet name="header">Alterar</f:facet>
                    <h:commandLink value="Alterar" action="#{canalBean.alterar(canal)}" />
                </h:column>

View

<h:form>
        <h:panelGrid columns="2">
            <h:outputLabel value="Nome:" for="nmCanal" />
            <h:inputText id="nmCanal" value="#{canalBean.canal.nmCanal}" />
            <h:outputLabel value="E-mail Contato:" for="emailAcesso" />
            <h:inputText id="emailAcesso" value="#{canalBean.canal.emailAcesso}" />
            <h:commandButton value="Salvar" action="#{canalBean.gravar}" />
        </h:panelGrid>
    </h:form>

Oi Guilherme

O que está imprimindo no System.out.println do seu managed bean?

A instancia da classe canal está sendo passada lá?

Além disso, você criou o método getCanal()? pode nos mandar o código completo do seu bean?

Boa tarde,

Aparece normal:

[CANAL DAO]: Listando Todos os Canais
[CANAL DAO]: Preparando Edição Registro
[CANAL DAO]: Canal: 10 teste altera - email2@testel2.com

e você criou o método getCanal()? pode nos mandar o código completo do seu bean?

import java.io.Serializable;
import java.util.List;

import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import br.com.mconsult.dao.CanalDAO;
import br.com.mconsult.entidade.Canal;

@SuppressWarnings("serial")
@Named
@ViewScoped
public class CanalBean implements Serializable {

    private Canal canal = new Canal();
    @Inject
    private CanalDAO cDao;

    public String gravar(){
        System.out.println("[CANAL DAO]: Gravando Registro");
        System.out.println("[CANAL DAO]: Canal: "+ canal.getIdCanal()+ " " + canal.getNmCanal() + " - " + canal.getEmailAcesso());
        if(canal.getIdCanal() == null){
            System.out.println("[CANAL DAO]: Registro novo sendo adicionado");
            cDao.adiciona(canal);
        }else{
            System.out.println("[CANAL DAO]: Registro sendo editado");
            cDao.atualiza(canal);
        }
        System.out.println("[CANAL DAO]: Registro finalizado!!");
        return "/canal/lista.xhtml";
    }

    public String excluir(Canal canal){
        System.out.println("[CANAL DAO]: Excluindo Registro");
        System.out.println("[CANAL DAO]: Canal: " + canal.getNmCanal() + " - " + canal.getEmailAcesso());
        cDao.remove(canal);
        return "/canal/lista.xhtml";
    }

    public String alterar(Canal canal){
        this.canal = canal;
        System.out.println("[CANAL DAO]: Preparando Edição Registro");
        System.out.println("[CANAL DAO]: Canal: "+ this.canal.getIdCanal() + " " + this.canal.getNmCanal() + " - " + this.canal.getEmailAcesso());
        return "/canal/cadastra";
    }

    public List<Canal> getCanais(){
        System.out.println("[CANAL DAO]: Listando Todos os Canais");
        return cDao.listaTodos();
    }


    //GETTERS AND SETTERS
    public Canal getCanal() {
        return canal;
    }
    public void setCanal(Canal canal) {
        this.canal = canal;
    }


}
}

Rodrigo,

Conseguiu dar uma olhada???

Oi Guilherme

O retorno nao deveria ser /canal/cadastra.xhtml?

Boa tarde Rodrigo.

Acabei viajando e sumindo. Troquei o escopo do Bean para Session e assim funcionou.

Mas tem como trabalhar com ViewScoped??

Tem como trabalhar com o ViewScopped sim, o problema é que você está fazendo o alterar trocar de página e por isso ele não está carregando as informações. Não era necessário fazer o

return "/canal/cadastra";