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";