O que tem de errado aqui?

6 respostas
pvrsouza

Galera,

Ja estou desesperado. O que tem de errado nesse código para nao atualizar o registro. Eu mando atualizar o registro e nao acontece nada! Estou desestimulado com o estudo por conta desse erro. Ja estou a dois dias tentando enteder o que esta acontencendo e cansei. Nao sei mais para onde olhar nesse codigo fonte. :(

alterar.xhtml
<f:view>
            <ui:composition template="/app/template/templateMaster.xhtml">
                <p:messages/>
                <ui:define name="informacao">
                    <h:outputText value="Adicionar escola"/>
                </ui:define>
                <ui:define name="content">
                    <c:if test="#{UsuarioBEAN.verificaSessao()}">
                        <h:form>
                            
                            <h:panelGrid columns="2" border="1">
                                <h:outputLabel value="ID:"/>
                                <h:outputLabel value="#{EscolaBEAN.escola.idEscola}"/>

                                <h:outputText value="Nome: "/>
                                <h:inputText size="40" value="#{EscolaBEAN.escola.nome}" required="true" requiredMessage="O campo NOME é obrigatório"/>

                                <h:outputText value="Municipio:"/>
                                <h:selectOneMenu id="tipo" value="#{EscolaBEAN.municipio.idMunicipio}" required="true" requiredMessage="O campo MUNICÍPIO é obrigatório">
                                    <f:selectItems id="setMunicipio" value="#{MunicipioBEAN.combo}"/>
                                </h:selectOneMenu>

                                <h:outputText value="Código Mec "/>
                                <h:inputText size="10" value="#{EscolaBEAN.escola.codMec}" required="true" requiredMessage="O campo Código é obrigatório"/>

                                <h:outputText value="Rua:"/>
                                <h:inputText  size="60"  value="#{EscolaBEAN.escola.rua}" required="true" requiredMessage="O campo RUA é obrigatório"/>

                                <h:outputText value="Bairro:"/>
                                <h:inputText  size="40"  value="#{EscolaBEAN.escola.bairro}" required="true" requiredMessage="O campo BAIRRO é obrigatório"/>

                                <h:outputText value="Numero:"/>
                                <h:inputText  size="10"  value="#{EscolaBEAN.escola.numero}" required="true"  requiredMessage="O campo NUMERO é obrigatório"/>

                                <h:outputText value="Complemento:"/>
                                <h:inputText  size="40"  value="#{EscolaBEAN.escola.complemento}" required="true" requiredMessage="O campo COMPLEMENTO é obrigatório"/>

                                <h:outputText value="Email:"/>
                                <h:inputText  size="30"  value="#{EscolaBEAN.escola.email}" required="true" requiredMessage="O campo EMAIL é obrigatório"/>

                                <h:outputText value="Modalidade:"/>
                                <h:selectOneMenu id="ativo"  value="#{EscolaBEAN.escola.modalidade}" required="true" requiredMessage="O campo MODALIDADE é obrigatório">
                                    <f:selectItem id="selectModalidade" itemValue="" itemLabel="Selecione..."/>
                                    <f:selectItem id="item2" itemLabel="CEEP" itemValue="CEEP"/>
                                    <f:selectItem id="item3" itemLabel="CETEP" itemValue="CETEP"/>
                                </h:selectOneMenu>
                                <h:commandButton value="Salvar" action="#{EscolaBEAN.alterar}"/>
                            </h:panelGrid>
                        </h:form>
                    </c:if>
                </ui:define>
            </ui:composition>
        </f:view>
EscolaBEAN
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.pablo.bean;

import br.com.pablo.dao.EscolaDAO;
import br.com.pablo.entity.Escola;
import br.com.pablo.entity.Municipio;
import java.sql.SQLException;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.faces.bean.ManagedBean;

/**
 *
 * @author alex
 */
@ManagedBean(name = "EscolaBEAN")
@RequestScoped
public class EscolaBEAN {

    private Escola escola;
    private List<Escola> escolas;
    private Municipio municipio = new Municipio();

    public Escola getEscola() {
        return escola;
    }

    public Municipio getMunicipio() {
        return municipio;
    }

    public void setMunicipio(Municipio municipio) {
        this.municipio = municipio;
    }

    public void setEscola(Escola escola) {
        this.escola = escola;
    }

    public List<Escola> getEscolas() {
        return escolas;
    }

    public void setEscolas(List<Escola> escolas) {
        this.escolas = escolas;
    }

    /** Creates a new instance of EscolaBEAN */
    public EscolaBEAN() {
        if (escola == null) {
            escola = new Escola();
            escola.setMunicipio(municipio);
        }

    }

    public List<Escola> getListaTodos() throws SQLException {
        return this.escolas = new EscolaDAO().getTodos();
    }

    public String cadastrar() throws SQLException {
        EscolaDAO dao = new EscolaDAO();
        dao.adcionarEscola(escola);
        return "irParaListar";
    }

    public String deletar() throws SQLException {
        EscolaDAO dao = new EscolaDAO();
        dao.deletarEscola(escola);
        return "irParaListar";
    }

    public String alterar() throws SQLException {
        EscolaDAO dao = new EscolaDAO();
        dao.atualizarEscola(escola);
        return "irParaListar";
    }
}
MunicipioBean
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.pablo.bean;

import br.com.pablo.dao.MunicipioDAO;
import br.com.pablo.entity.Municipio;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;

/**
 *
 * @author alex
 */
@ManagedBean(name="MunicipioBEAN")
@RequestScoped
public class MunicipioBEAN {

    private Municipio municipio;
    private List<Municipio> municipios = null;
    private List<SelectItem> combo;
  

    /** Creates a new instance of MunicipioBEAN */
    public MunicipioBEAN() {
        if (municipio == null) {
            municipio = new Municipio();
        }
    }

    public void setCombo(List<SelectItem> combo) {
        this.combo = combo;
    }

    public Municipio getMunicipio() {
        return municipio;
    }

    public void setMunicipio(Municipio municipio) {
        this.municipio = municipio;
    }

    public List<Municipio> getMunicipios() {
        return municipios;
    }

    public void setMunicipios(List<Municipio> municipios) {
        this.municipios = municipios;
    }

    public List<Municipio> getTodos() throws SQLException
    {
        return municipios = new MunicipioDAO().getTodos();
    }

    public List<SelectItem> getCombo() throws SQLException {
        if (combo == null) {
            ArrayList<Municipio> todosMunicipios = (ArrayList<Municipio>) this.getTodos();
            combo = new ArrayList<SelectItem>();
            combo.add(new SelectItem("", "Selecione..."));
            for (Municipio set : todosMunicipios) {
                combo.add(new SelectItem(set.getIdMunicipio(), set.getDescricao()));
            }
        }
        return combo;
    }
}
EscolaDAO
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.pablo.dao;

import br.com.pablo.entity.Atendimento;
import br.com.pablo.entity.Escola;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author pablosouza
 */
public class EscolaDAO extends GenericDAO {

    private Escola escola = new Escola();
    private List<Escola> escolas = null;
    

    @Override
    public Object preencherEntidade(ResultSet rs) throws SQLException {
        Escola esc = new Escola();
        esc.setIdEscola(rs.getInt("ID_ESCOLA"));
        esc.setNome(rs.getString("NOME"));
        esc.setRua(rs.getString("RUA"));
        esc.setBairro(rs.getString("BAIRRO"));
        esc.setNumero(rs.getInt("NUMERO"));
        esc.setComplemento(rs.getString("COMPLEMENTO"));
        esc.setEmail(rs.getString("EMAIL"));
        esc.setModalidade(rs.getString("MODALIDADE"));
        esc.setCodMec(rs.getInt("COD_MEC"));
        esc.setMunicipio(new MunicipioDAO().getMunicipio(rs.getInt("ID_MUNICIPIO")));
        //escola.setTelefones(new TelefoneEscolaDAO().getTelefones(rs.getInt("ID_ESCOLA")));
        //escola.setAtendimentos(new AtendimentoDAO().getAtendimentos(rs.getInt("ID_ESCOLA")));

        return esc;
    }

    public Escola getEscola(Integer idEscola) throws SQLException {
        ResultSet rs = executarQuery("SELECT * FROM TB_ESCOLA WHERE ID_ESCOLA = ?", idEscola);
        if (rs.next()) {
            escola = (Escola) preencherEntidade(rs);
        }
        return escola;
    }

    public void adcionarEscola(Escola escola) throws SQLException {
        String sql = "INSERT INTO TB_ESCOLA("
                + "COD_MEC,"
                + "NOME,"
                + "RUA,"
                + "BAIRRO,"
                + "NUMERO,"
                + "COMPLEMENTO,"
                + "EMAIL,"
                + "MODALIDADE,"
                + "ID_MUNICIPIO) "
                + "VALUES (?,?,?,?,?,?,?,?,?)";

        executarComando(sql,
                escola.getCodMec(),
                escola.getNome(),
                escola.getRua(),
                escola.getBairro(),
                escola.getNumero(),
                escola.getComplemento(),
                escola.getEmail(),
                escola.getModalidade(),
                escola.getMunicipio().getIdMunicipio());
    }

    public void atualizarEscola(Escola escola) throws SQLException {
        String sql = "UPDATE TB_ESCOLA SET COD_MEC=?, NOME=?, RUA=?,BAIRRO=?, "
                + "NUMERO=?, COMPLEMENTO=?, EMAIL=?, MODALIDADE=?, ID_MUNICIPIO=? WHERE ID_ESCOLA=?";

        executarComando(sql,
                escola.getCodMec(),
                escola.getNome(),
                escola.getRua(),
                escola.getBairro(),
                escola.getNumero(),
                escola.getComplemento(),
                escola.getEmail(),
                escola.getModalidade(),
                escola.getMunicipio().getIdMunicipio(),
                escola.getIdEscola());
    }

    public void deletarEscola(Escola escola) throws SQLException{
        String sql = "DELETE FROM TB_ESCOLA WHERE ID_ESCOLA = ?";
        executarComando(sql, escola.getIdEscola());
    }

    public List<Escola> getTodos() throws SQLException{
        ResultSet rs = executarQuery("SELECT * FROM TB_ESCOLA");
        List<Escola> escolas = null;
        if(rs.next()){
            escolas = new ArrayList<Escola>();
            do {
                Escola escola = (Escola) preencherEntidade(rs);
                escolas.add(escola);
            } while (rs.next());
        }
        rs.close();
        return escolas;
    }

    public List<Atendimento> getAtendimentos(Escola esc) throws SQLException{
        ArrayList<Atendimento> atendimentos = new ArrayList<Atendimento>();
        ResultSet rs = executarQuery("SELECT * FROM TB_ATENDIMENTO WHERE ID_ESCOLA = ?", esc.getIdEscola());
        if(rs.next()){
            do {
                
            } while (rs.next());
        }
        return null;

    }
}

6 Respostas

L

Não dá nenhuma mensagem de erro?

fantomas

Você falou sobre atualização de registro, vou assumir que vc está se referindo ao método “atualizarEscola” da classe EscolaDAO. Se isto estiver correto faça os seguintes testes:

  1. Verifique se não está havendo nenhuma exception como indicado pelo Lucas Emanuel; procure nos logs do webserver.
  2. Certifique-se de que os dados estão chegando corretamente no método atualizarEscola; utilize o debugger.
  3. A sua atualização é baseada em um critério (WHERE ID_ESCOLA=?) verifique se este critério está sendo obedecido.
  4. Certifique-se de que está sendo executado o comando commit; me parece que alguns bancos tem commit automático e outros não. Isto deve estar dentro do método executarComando do GenericDAO.

flws

pvrsouza

Não dá mensagem de erro Lucas. :frowning:

É isto mesmo.

Confesso que eu não sei olhar os logs do webserver. Estou usando o GlassFish e Netbeans como IDE. Já rodo o server direto do NetBeans.

Quando eu debugo, eu observo a variável “escola” que vem do bean e entra como parametro no método “atualizarEscola” da calsse DAO. E ela vem com todos os atributos MENOS O SAFADO DO ID_ESCOLA.Rsrsrsrs.

Eu tentei colocar o valor do ID_ESCOLA diretamente na instrução sql, conforme o código abaixo e FUNCIONOU!.

String sql = "UPDATE TB_ESCOLA SET COD_MEC=?, NOME=?, RUA=?,BAIRRO=?, NUMERO=?, COMPLEMENTO=?, EMAIL=?, MODALIDADE=?, ID_MUNICIPIO=? WHERE ID_ESCOLA=1";

[color=red]Dei um ponto de parada no comando executarComando e pedir para observar a variavel “escola.getIdEscola()” e realmente esta indo passando “null”. [/color]

Acho que isso não se aplica levando em consideração o problema citado acima ( sobre o criterio da instrução sql)

Eu acho que meu problema tá na view. Mas ainda assim não sei resolver! Rsrs. (é chato ser newbie viu!)

Vou aguardar mais alguma luz aqui e de qualquer jeito agradeço pela atenção de vcs! Já me ajudou a enxergar um detalhe que eu não tinha visto!

Abraços

fantomas

Entendi.

Como se trata de uma alteração, o id não deveria estar nulo pelo fato do registro completo vir da base de dados.

Outro detalhe é que uma alteração sempre está associada a uma consulta, raramente é diferente.

Com isto em mente e o debugger na mão, faça uma revisão no fluxo da alteração. Comece a partir do momento em que o registro foi lido na base de dados e vá seguindo até a efetivação da atualização. Faça isso bem devagar porque em algum ponto neste fluxo vc está perdendo o id. Talvez no momento de “trocar” os dados para uma estrutura mais elaborada (BEAN) para satisfazer a view ou algo assim.

flws

pvrsouza

fantomas:
Entendi.

Como se trata de uma alteração, o id não deveria estar nulo pelo fato do registro completo vir da base de dados.

Outro detalhe é que uma alteração sempre está associada a uma consulta, raramente é diferente.

Com isto em mente e o debugger na mão, faça uma revisão no fluxo da alteração. Comece a partir do momento em que o registro foi lido na base de dados e vá seguindo até a efetivação da atualização. Faça isso bem devagar porque em algum ponto neste fluxo vc está perdendo o id. Talvez no momento de “trocar” os dados para uma estrutura mais elaborada (BEAN) para satisfazer a view ou algo assim.

flws

Beleza. Vou prestar atencao a esses pontos e volto aqui para dar um feedback.

Em todo caso, já aproveito para perguntar uma coisa: existe a possibilidade de debugar a view?

Abraços

pvrsouza

Galera,

Vejam só como eu resolvi. Eu achei meio POG (Programacão Orientada a Gambiarra), mas foi o que eu consegui fazer para resolver.

Eu coloquei na minha view um campo hidden para setar o idEscola. O que acham desta solucao?

P.S: Aproveito para mais uma vez agradecer atençao de todos!

<h:inputHidden value="#{EscolaBEAN.escola.idEscola}"/>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:p="http://primefaces.prime.com.tr/ui">

    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <f:view>
            <ui:composition template="/app/template/templateMaster.xhtml">
                <p:messages/>
                <ui:define name="informacao">
                    <h:outputText value="Adicionar escola"/>
                </ui:define>
                <ui:define name="content">
                    <c:if test="#{UsuarioBEAN.verificaSessao()}">
                        <h:form>
                            <h:inputHidden value="#{EscolaBEAN.escola.idEscola}"/>
                            <h:panelGrid columns="2" border="1">
                                <h:outputLabel value="ID:"/>
                                <h:outputLabel value="#{EscolaBEAN.escola.idEscola}"/>

                                <h:outputText value="Nome: "/>
                                <h:inputText size="40" value="#{EscolaBEAN.escola.nome}" required="true" requiredMessage="O campo NOME é obrigatório"/>

                                <h:outputText value="Municipio:"/>
                                <h:selectOneMenu id="tipo" value="#{EscolaBEAN.municipio.idMunicipio}" required="true" requiredMessage="O campo MUNICÍPIO é obrigatório">
                                    <f:selectItems id="setMunicipio" value="#{MunicipioBEAN.combo}"/>
                                </h:selectOneMenu>

                                <h:outputText value="Código Mec "/>
                                <h:inputText size="10" value="#{EscolaBEAN.escola.codMec}" required="true" requiredMessage="O campo Código é obrigatório"/>

                                <h:outputText value="Rua:"/>
                                <h:inputText  size="60"  value="#{EscolaBEAN.escola.rua}" required="true" requiredMessage="O campo RUA é obrigatório"/>

                                <h:outputText value="Bairro:"/>
                                <h:inputText  size="40"  value="#{EscolaBEAN.escola.bairro}" required="true" requiredMessage="O campo BAIRRO é obrigatório"/>

                                <h:outputText value="Numero:"/>
                                <h:inputText  size="10"  value="#{EscolaBEAN.escola.numero}" required="true"  requiredMessage="O campo NUMERO é obrigatório"/>

                                <h:outputText value="Complemento:"/>
                                <h:inputText  size="40"  value="#{EscolaBEAN.escola.complemento}" required="true" requiredMessage="O campo COMPLEMENTO é obrigatório"/>

                                <h:outputText value="Email:"/>
                                <h:inputText  size="30"  value="#{EscolaBEAN.escola.email}" required="true" requiredMessage="O campo EMAIL é obrigatório"/>

                                <h:outputText value="Modalidade:"/>
                                <h:selectOneMenu id="ativo"  value="#{EscolaBEAN.escola.modalidade}" required="true" requiredMessage="O campo MODALIDADE é obrigatório">
                                    <f:selectItem id="selectModalidade" itemValue="" itemLabel="Selecione..."/>
                                    <f:selectItem id="item2" itemLabel="CEEP" itemValue="CEEP"/>
                                    <f:selectItem id="item3" itemLabel="CETEP" itemValue="CETEP"/>
                                </h:selectOneMenu>
                                <h:commandButton value="Salvar" action="#{EscolaBEAN.alterar}"/>
                            </h:panelGrid>
                        </h:form>
                    </c:if>
                </ui:define>
            </ui:composition>
        </f:view>
    </h:body>
</html>
Criado 30 de novembro de 2010
Ultima resposta 30 de nov. de 2010
Respostas 6
Participantes 3