[RESOLVIDO]Editando linha em uma lista

20 respostas
felipe_thrash

Pessoal,

tenho uma lista, mas quero complementa-la, com um link “editar” ao lado de uma linha, tipo assim:

quero poder editar a linha assim:

minha lista.jsp:

<html>
<%
        ContatoDAO dao = new ContatoDAO();
        List<Contato> contato = dao.getLista();
        for (Contato contatos : contato){
        %>
<table border>
<tr>
<td width=25 align="center"><%=contatos.getId()%></td>
<td width=25 align="center"><%=contatos.getNome()%></td>
<td width=25 align="center"><%=contatos.getSenha()%></td>
<%}%>
</html>

no meu DAO, ja criei a parte que altera:

public void Altera(Contato contato) throws SQLException { PreparedStatement stmt = this.connection.prepareStatement("update autenticacao set nome=?,senha=? where id=?"); stmt.setString(1,contato.getId()); stmt.setString(2,contato.getNome()); stmt.setString(3,contato.getSenha()); stmt.execute(); stmt.close(); }

então, parto da lógica onde, o link pra edição vai me levar para outra jsp (alterar.jsp), onde chama a row que quero alterar, com cada campo em sua textbox… pronto pra alterar, e clicando OK… vai pra uma servlet que chama o DAO e altera os dados…

minha cabeça deu um nó! :?

como faço isso ?

alguem pode me ajudar ?

20 Respostas

marcushlm

rapaz, de cara, o link de editar tem que ser criado dinamicamente
pra que ele fique mais ou menos assim

editar.jsp?id=12

na pagina de editar você carrega esse objeto de id 12 na tela pra ele poder ser editado

depois voce manda pra uma action/servlet que salva a alteração e direciona pra listagem denovo.

felipe_thrash

umm… agora entendi! a teoria… hehehe

tenho sérios problemas com isso…

podem me dar um exemplo básico !? como criar dinamicamente ?
estou pesquisando tb…

agradeço muito :smiley:

marcushlm

mais ou menos assim oh

<html>  
 <%  
         ContatoDAO dao = new ContatoDAO();  
         List<Contato> contato = dao.getLista();  
         for (Contato contatos : contato){  
         %>  
 <table border>  
 <tr>  
 <td width=25 align="center"><%=contatos.getId()%></td>  
 <td width=25 align="center"><%=contatos.getNome()%></td>  
 <td width=25 align="center"><%=contatos.getSenha()%></td>  
 <td width=25 align="center"><a href="editar.jsp?id=<%=contatos.getId()%>">Editar</a></td>  
 <%}%>  
 </html>

na pagina editar você captura o parametro pelo nome.

testa ai!

felipe_thrash

certo, coloquei o link editar…

agora não to sabendo como tratar os campos, com as values carregadas… como faço ?

quando clico em editar, o browser me leva ao endereço:
http://localhost:8084/CRUD/editar.jsp?id=1

na editar.jsp, estou tentando:

<%@ page import="crud.*;"%>
<html>
   Editando um Contato:<br/>
   <%
        Contato contato = new Contato();
        contato.getId();
        contato.getNome();
        contato.getSenha();
   %>
   
    <br/>
    <FORM action="EditarContato" method="POST">
    Id: <INPUT TYPE="text" name="id" size=17 maxlength=255 value="id" class="form"><br/>
    Nome: <INPUT TYPE="text" name="nome" size=17 maxlength=255 value="nome" class="form"><br/>
    Senha: <INPUT TYPE="text" name="senha" size=17 maxlength=255 value="senha" class="form"><br/>
<INPUT type="submit" value="Alterar" />
    </br>
    
</html>

acredito q seja na “value” ali, mas… como trato o problema ? ja tentei de todo jeito com aspas e macumbinha…

???

marcushlm

calminha,

na pagina de editar, tu nao vai instanciar um novo contato
crie um metodo no dao que retorna um objeto contato a partir de seu id, ok?

você chama esse metodo e nos campos você faz o seguinte:

<INPUT TYPE="text" name="nome" size=17 maxlength=255 value="<%=contato.getNome()%>"/>

:wink:

felipe_thrash

é realmente, nem adianta instanciar… pq ta retornando null… :cry:

crie um metodo no dao que retorna um objeto contato a partir de seu id, ok?

ai meu Deus! :? (what tha ?)

felipe_thrash
no DAO to tentando:
public void RetornaContato(String id){
        Contato contato = new Contato();
        

    // e agora !?    

    }

ajude um pobre iniciante! :cry:

marcushlm

como diria jack o estripador, vamos por partes hehehe

no metodo que retorna o contato
cria um statement e faz uma busca na tabela

PreparedStatement stmt = this.connection.prepareStatement("select * from autenticacao where id = ?"); 
stmt.setString(1,id); //ou setInt se for int

depois tu percorre o resultset e preenche o objeto contato.
retorna ele e pronto :smiley:

felipe_thrash

marcushlm,

não me xingue!
mas olha só:

http://localhost:8084/CRUD/editar.jsp?id=1
no meu browser, o id inicialmente ficaria com valor 1 certo ? ( ou estou louco ?) na editar.jsp:
Editando um Contato:<br/>
   <%
        ContatoDAO dao = new ContatoDAO();
        dao.RetornaContato(id);
   %>
Agora, no método RetornaContato:
public void RetornaContato(String id) throws SQLException {
        Contato contato = new Contato();
        PreparedStatement stmt = this.connection.prepareStatement("select * from autenticacao where id = ?");   
        stmt.setString(1,id);
       
        //stmt.setString(2,nome);
        //stmt.setString(3,senha);
        
    }

como vou setar dentro do método, então vou ter que reformular com variáveis de entrada assim ?

public void RetornaContato ( String id, String nome, String senha)

????

daí então tenho q carregar no browser isso ?
http://localhost:8084/CRUD/editar.jsp?id=1?nome=fulano?senha=123

:cry: estou meio zuado... espero q tenha entendido...

valew!

G

Vamos lá… por parte…

Primeiramente… no editar.jsp vc chama o DAO para retornar o contato, baseado no seu código… então ficaria assim:

Editando um Contato:<br/>
   <%
        ContatoDAO dao = new ContatoDAO();
        Contato contato = dao.RetornaContato(id);
   %>

No DAO você tem que buscar o contato no BD baseado no ID, criar um novo contato e depois chamar os métodos setters atribuindo os valores retornados pela busca no banco… ficaria mais ou menos assim:

public void RetornaContato(String id) throws SQLException {
        Contato contato = new Contato();
        PreparedStatement stmt = this.connection.prepareStatement("select * from autenticacao where id = ?");   
        stmt.setString(1,id);
       
        ResultSet res = stm.executeQuery();

        if (res.next()) {
            contato.setAlgumAtributo(res.getAlgumTipo("AlgumCampo");
        }
    }

Daí é só repetir os “setAlgumAtributo” para cada atributo da sua classe contato, trocando AlgumAtributo pelo nome do atributo, AlgumTipo pelo tipo do atributo e AlgumCampo pelo nome do campo no banco de dados.

felipe_thrash

fala Genos, valew pelo apoio!

saquei a lógica... então vamos lá:

olha só como ficou o RetornaContato:
public void RetornaContato(String id) throws SQLException {
        Contato contato = new Contato();
        PreparedStatement stmt = this.connection.prepareStatement("select * from autenticacao where id = ?");
        stmt.setString(1,id);
        ResultSet res = stmt.executeQuery();
        if (res.next()) {
            contato.setNome(res.getString("nome"));
            contato.setSenha(res.getString("senha"));
        }
        stmt.close();
        
    }
minha editar.jsp contém:
Editando um Contato:<br/>
   <%
        ContatoDAO dao = new ContatoDAO();
        Contato contato = dao.RetornaContato(id);
   %>
   
    <br/>
    <FORM action="EditarContato" method="POST">
    Id: <INPUT TYPE="text" name="id" size=17 maxlength=255 value="<%=contato.getId()%>" class="form"><br/>
    Nome: <INPUT TYPE="text" name="nome" size=17 maxlength=255 value="<%=contato.getNome()%>" class="form"><br/>
    Senha: <INPUT TYPE="text" name="senha" size=17 maxlength=255 value="<%=contato.getSenha()%>" class="form"><br/>
mas testando, o tomcat ainda ta me apontando erro... :cry:
exception 

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 6 in the jsp file: /editar.jsp
Generated servlet error:
C:\Documents and Settings\est08651\.netbeans\5.5\apache-tomcat-5.5.17_base\work\Catalina\localhost\CRUD\org\apache\jsp\editar_jsp.java:51: cannot find symbol
symbol  : variable id
location: class org.apache.jsp.editar_jsp
        Contato contato = dao.RetornaContato(id);
                                             ^
1 error

o q pode ser ??????

e pela lógica, ta ficando bom o RetornaContato! :P

valew

felipe_thrash

galera,

nao entendo: ainda persiste minha dúvida:

quando chamo no browser:

http://localhost:8084/CRUD/editar.jsp?id=1

é pra id receber automaticamente o valor 1 ? ???

e pq dá erro de não achar a variável ???

cannot find symbol
symbol : variable id
location: class org.apache.jsp.editar_jsp
Contato contato = dao.RetornaContato(id);

:?

help! alguem!!!

G

Felipe… quando vc passa o link http://localhost:8084/CRUD/editar.jsp?id=1, vc está passando id como parâmetro… e tem que recuperá-lo no jsp

<%   
     ContatoDAO dao = new ContatoDAO();   
     int id = ((Integer)request.getParameter("id")).intValue();
     Contato contato = dao.RetornaContato(id);   
%>
felipe_thrash

isso! tb tava procurando isso:

tirei as aspas ali no id, pra ficar como int :stuck_out_tongue:

int id = ((Integer)request.getParameter(id)).intValue();

bem, passei pra int o id… só não entendi a linha :roll:
passei pra int a variavel de entrada tb :
public void RetornaContato(int id)

de todo jeito o tomcat diz:

exception 

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 6 in the jsp file: /editar.jsp
Generated servlet error:
C:\Documents and Settings\est08651\.netbeans\5.5\apache-tomcat-5.5.17_base\work\Catalina\localhost\CRUD\org\apache\jsp\editar_jsp.java:51: getParameter(java.lang.String) in javax.servlet.ServletRequest cannot be applied to (int)
        int id = ((Integer)request.getParameter(id)).intValue(); 
                                  ^


An error occurred at line: 6 in the jsp file: /editar.jsp
Generated servlet error:
C:\Documents and Settings\est08651\.netbeans\5.5\apache-tomcat-5.5.17_base\work\Catalina\localhost\CRUD\org\apache\jsp\editar_jsp.java:52: incompatible types
found   : void
required: crud.Contato
        Contato contato = dao.RetornaContato(id);
                                            ^
2 errors

que que issoooooo ???

help! :?

cyrofranco

Cara se nao me engano voce nao pode resgatar no jsp com o request.getParameter…
antes disso la no seu servlet voce irá ter q dar um

request.setAttribute("obj",nomedoseuobjeto);
RequestDispatcher rd;
rd = getServletContext().getRequestDispatcher("/ver.jsp");   
rd.forward(request, response);     
out.close();

e lá no jsp vc vai ter que dar um…

request.getAttribute(obj);

corrijam me se estiver errado…

felipe_thrash

cyrofranco, valew o apoio!

olha só:

eu não to querendo usar servlet ainda aki não… a não ser q seja preciso…
a jsp precisa carregar os mal**tos valores no osso… hehehe

quero depois criar a servlet “EditarContato” só pra firmar no banco!

então galera, descartamos o request.setAttribute(id) !?

valew!

cyrofranco

<jsp:useBean id=“obj” class=“pacote.classe(do objeto)”/>

mas no topo da sua tela de exibição coloque essa tag

felipe_thrash

cyrofranco:
<jsp:useBean id=“obj” class=“pacote.classe(do objeto)”/>

mas no topo da sua tela de exibição coloque essa tag

uso aki?

<td width=25 align="center"><a href="editar.jsp?id=<%=contatos.getId()%>">Editar</a></td>

tornando assim ?

<td width=25 align="center"><a href="editar.jsp:useBean id=<%=contatos.getId()%> class="crud.Contato"">Editar</a></td>

e como chamo ele na página editar ???
sem ser assim oh:

int id = ((Integer)request.getParameter("id")).intValue();

???

ajude um novato!
:?

valew

felipe_thrash

pessoal, desculpa pela ignorância.. hehehe

agora olhando exemplos de useBean..... consegui em parte:

olha só então o editar.jsp:
<jsp:useBean id="crud" class="crud.Contato" scope="session"/>
<jsp:setProperty name="crud" property="*"/>
<%@ page import="crud.*;"%>
<html>
   Editando um Contato:<br/>
   <%
        ContatoDAO dao = new ContatoDAO();
        String id = crud.getId();
        Contato contato = dao.RetornaContato(id);
   %>
só falta esse erro aki a ser essclarecido:
exception 

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 8 in the jsp file: /editar.jsp
Generated servlet error:
C:\Documents and Settings\est08651\.netbeans\5.5\apache-tomcat-5.5.17_base\work\Catalina\localhost\CRUD\org\apache\jsp\editar_jsp.java:63: incompatible types
found   : void
required: crud.Contato
        Contato contato = dao.RetornaContato(id);
                                            ^
1 error

alguem me ajuda ?

:wink:

felipe_thrash

galera, resolvido o problema....e quão simples era a solução!

o método RetornaContato não poderia ser void... pq ele tem q retornar os dados...

então fica assim o método:
public Contato RetornaContato(String id) throws SQLException {
        Contato contato = new Contato();
        PreparedStatement stmt = this.connection.prepareStatement("select * from autenticacao where id = ?");
        stmt.setString(1,id);
        ResultSet res = stmt.executeQuery();
        if (res.next()) {
            contato.setId(res.getString("id"));
            contato.setNome(res.getString("nome"));
            contato.setSenha(res.getString("senha"));
            
        }
        stmt.close();
        return contato;
        
    }
}

agora o editar.jsp ta redondinho...

obrigado a todos que ajudaram! :D

Criado 7 de novembro de 2007
Ultima resposta 9 de nov. de 2007
Respostas 20
Participantes 4