[resolvido] Imprimir dados de alteração

Estou tentando imprimir os dados de um registro pra possivel alteração.
É a página de alteração de contato da apostila da caelum.

Não sei se está certo, mas tem a pagina que lista os contatos, e coloquei um link assim nela.

<a href="altera-contato.jsp?id=${contato.id}">Editar</a>

Tá certo isso, ou eu teria que criar um servlet só pra mostrar essa página de edição.

Dessa forma que eu fiz, me leva pra pagina altera-contato.jsp que está assim:

[code]<%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
<%@taglib uri=“http://java.sun.com/jsp/jstl/fmt” prefix=“fmt”%>

<c:import url=“header.jsp” />

Alteração de Contato

<jsp:useBean id=“dao” class=“pack.modelo.ContatoDAO” />

<%
if (request.getParameter(“id”) != null) {
String id = request.getParameter(“id”);
Long idLong = Long.valueOf(id);
//out.println(idLong);
}
%>
<c:forEach var=“contato” items="${dao.contato(idLong)}">


ID:
${contato.id}



Nome:



Email:



Endereço:



Data Nascimento:
<listagem:campoData id=“dataNascimento” />







</c:forEach>

<c:import url=“footer.jsp” />[/code]

O DAO não tá pegando a lista gerada no método getContato(long id), esse metodo tá no meu DAO assim:

public List<Contato> getContato(long id) {
        try {
            List<Contato> contatos = new ArrayList<Contato>();

            String sql = "SELECT * FROM cadastros WHERE id = " + id;
            PreparedStatement stmt = this.connection.prepareStatement(sql);
            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {
                // criando o objeto Contato
                Contato contato = new Contato();
                contato.setId(rs.getLong("id"));
                contato.setNome(rs.getString("nome"));
                contato.setEmail(rs.getString("email"));
                contato.setEndereco(rs.getString("endereco"));

                // montado a data através do calendar
                Calendar data = Calendar.getInstance();
                data.setTime(rs.getDate("dataNascimento"));
                contato.setDataNascimento(data);

                // adicionando o objeto à lista
                contatos.add(contato);
            }

            rs.close();
            stmt.close();
            return contatos;

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

Obrigado.

Poxa, ninguém sabe mesmo? :frowning:

esquece faltou colocar o tipo :slight_smile:

Andrea, muita calma nessa hora. Primeiro que trata-se de um fórum e muitos, assim como eu, trabalham e não conseguem estar constantemente aqui para ajudar. A segunda questão é que você postou na área de Java Basico uma dúvida de JEE, existe um local do fórum adequado a esse tipo de dúvida.

Minha recomendação é que o href faça uma referência a um Servlet e você deixe a cargo do teu Servlet a consulta ao banco, popular a lista e executar o redirect. Da forma que fez, fica a cargo do cliente e não é interessante isso em desenvolvimento WEB. Sobre mostrar os dados, me parece estar correto. Faça como eu disse, use um Servlet para o que precisa ser feito no lado servidor e retorne já a lista preenchida, depois basta recupera-la no seu JSP.

Blz Nel, é que eu postei isso faz 9 dias :slight_smile:
Então minha única alternativa foi ficar tentando tudo que posso.
Como tô iniciando, pra mim isso era uma dúvida básica :slight_smile:

Pegar o id pela url e usar o DAO está errado então?

tipo:

[code]
<jsp:useBean id=“dao” class=“pack.modelo.ContatoDAO” />

<%
Long id = Long.parseLong(request.getParameter(“id”));
List contato = dao.getContato(id);

for (int i = 0; i < contato.size(); i++) {
out.println("

" + contato.get(i).getEmail() + “

”);
out.println("

" + contato.get(i).getNome() + “

”);
out.println("

" + contato.get(i).getEndereco() + “

”);
}
%>
[/code]

Obrigado

[quote=andreacerqueira]Blz Nel, é que eu postei isso faz 9 dias :slight_smile:
Então minha única alternativa foi ficar tentando tudo que posso.
Como tô iniciando, pra mim isso era uma dúvida básica :slight_smile:

Pegar o id pela url e usar o DAO está errado então?

tipo:

[code]
<jsp:useBean id=“dao” class=“pack.modelo.ContatoDAO” />

<%
Long id = Long.parseLong(request.getParameter(“id”));
List contato = dao.getContato(id);

for (int i = 0; i < contato.size(); i++) {
out.println("

" + contato.get(i).getEmail() + “

”);
out.println("

" + contato.get(i).getNome() + “

”);
out.println("

" + contato.get(i).getEndereco() + “

”);
}
%>
[/code]

Obrigado[/quote]

Dizer que está errado é complicado, mas eu só não aconselho. Acredito que isso seja algo a ser deixado a cargo do lado servidor e não do cliente. Quando você faz isso, ele não vai ao teu Servlet, ele simplesmente abre uma nova página e via scriplet faz uma consulta diretamente ao seu DAO, pula todas as outras camadas, concorda? Não é a maneira mais adequada a ser feita.

Veja essa linha:List<Contato> contato = dao.getContato(id);

É uma consulta SQL dentro de uma página JSP. O que acontece se gerar exceção ? Não deveria redirecionar para uma página de erro ? Dar um rollback ? Se não encontrar nenhum item, nenhum contato, beleza ? Sem problemas ? Qual o tratamento ?

Entende porque eu digo que deve-se usar desenvolvimento em camadas e enviar a informação para o teu Servlet e não diretamente para a página?
Abraços Andrea.

Vlw Nell, era isso mesmo que eu queria saber.
Agora vou pesquisar melhor sobre servlets, pq me parece que terei que criar milhões delas e é isso que tô achando bizarro.
Vlw pela resposta :wink:

[quote=andreacerqueira]Vlw Nell, era isso mesmo que eu queria saber.
Agora vou pesquisar melhor sobre servlets, pq me parece que terei que criar milhões delas e é isso que tô achando bizarro.
Vlw pela resposta ;)[/quote]

Você não precisa criar necessariamente um Servlet para cada necessidade. Como por exemplo, tu tem uma tela com o famoso CRUD, ou seja, Consulta, Deleta, Atualiza e Cria ok? Digamos que seja a tela de Cliente. Não precisa criar um “ClientServletCreate”, “ClientServletUpdate” e assim por diante (sou péssimo para dar nome aos ‘bois’). Mas tu pode ter um “ClientServlet” e nele centralizar todas as necessidades referentes a tela de Cliente.

Quando uma tela exige muitas funções, isso pode tornar trabalhoso e deixar o código na Servlet “feio” e pouco performático, esse seria um caso a usar um segundo Servlet, por exemplo. Bom, vai da sua experiência e necessidade, cada caso é um caso e deve ser analisado isoladamente.

Abraços .

Vlw agora esclareceu tudo :slight_smile: