[RESOLVIDO] - método para edição, VRaptor!

Galera tô com dificuldade em criar o método para editar dados…

[code] @Path("/usuario/{usuario.login}")
@Put
public void altera(Usuario usuario, String login) {
if (usuario.getNome().length() < 3 || usuario.getNome() == null) {
validator.add(new ValidationMessage(
“O campo Nome é obrigatório e precisa ter mais de 3 caracteres”, “usuario.nome”));
}
if (usuario.getLogin().length() < 5 || usuario.getLogin().length() > 10 || usuario.getLogin() == null) {
validator.add(new ValidationMessage(
“O campo Login é obrigatório e precisa ter entre 5 e 10 caracteres”, “usuario.login”));
}
if (usuario.getSenha().length() < 5 || usuario.getSenha().length() > 10 || usuario.getSenha() == null) {
validator.add(new ValidationMessage(
“O campo Senha é obrigatório e precisa ter entre 5 e 10 caracteres”, “usuario.senha”));
}

    validator.onErrorUse(Results.page()).of(UsuarioController.class).edita();

    dao.atualiza(usuario);
    result.redirectTo(UsuarioController.class).lista();
}[/code]

@Path("/usuario/{login}/edita") @Get public Usuario edita(String login) { return dao.carrega(login); }

public void edita() { }

só que na hora em que eu aperto gravar na página edita.jsp
ele troca o login e coloca isso aki:

Load, você carrega os dados , ai no merge você atualiza

# /* 
# * GenericDAO.java 
# * 
# * Created on 22 de Abril de 2007, 16:15 
# * 
# * To change this template, choose Tools | Template Manager 
# * and open the template in the editor. 
# */  
#   
# package spsv02.persistencias;  
# import java.io.Serializable;  
# import java.sql.Connection;  
# import java.sql.SQLException;  
# import java.util.List;  
# import javax.swing.JOptionPane;  
# import org.hibernate.*;  
# import org.hibernate.criterion.Order;  
# import org.hibernate.stat.SessionStatistics;  
# /** 
# * 
# * @author Rogerio MQ 
# */  
# public class GenericDAO  
# {  
#     private static Session sessao;  
#     private Transaction transacao;  
#   
#     /** Creates a new instance of GenericDAO */  
#   
#     public void objInserir( Object obj ) throws Exception  
#     {  
#             sessao = HibernateUtil.  
#             transacao = sessao.beginTransaction();  
#             sessao.save(obj);  
#             sessao.flush();  
#             transacao.commit();  
#             sessao.close();  
#     }  
#   
#     public void objAlterar( Object obj ) throws Exception  
#     {  
#             sessao = HibernateUtil.getSession();  
#             transacao = sessao.beginTransaction();  
#   
#             sessao.update(obj);  
#             sessao.flush();  
#             transacao.commit();  
#             sessao.close();  
#   
#     }  
#   
#     public void objDeletar( Object obj ) throws Exception  
#     {  
#             sessao = HibernateUtil.getSession();  
#             transacao = sessao.beginTransaction();  
#   
#             sessao.delete(obj);  
#             sessao.flush();  
#             transacao.commit();  
#             sessao.close();  
#   
#     }  
#   
#     public List listar(Class clazz) throws Exception  
#     {  
#         sessao = HibernateUtil.getSession();  
#         transacao = sessao.beginTransaction();  
#   
#         List objts;  
#         objts = null;  
#         Criteria selectAll = sessao.createCriteria(clazz);  
#         transacao.commit();  
#         objts = selectAll.list();  
#         sessao.close();  
#         return objts;  
#     }  
#   
#      public Object listar(Class clazz, String pk) throws Exception  
#     {  
#         sessao = HibernateUtil.getSession();  
#         transacao = sessao.beginTransaction();  
#         Fornecedor objt = (Fornecedor) sessao.load(clazz, new Integer(Integer.parseInt(pk)) );  
#         transacao.commit();  
#         sessao.flush();  
#         sessao.close();  
#         return objt;  
#     }  
#   
#   
#     public void rollBack()  
#     {  
#         transacao.rollback();  
#         sessao.close();  
#     }  
#   
#     public void closeConnection() throws Exception  
#     {  
#             sessao = HibernateUtil.getSession();  
#             sessao.connection().createStatement().execute("SHUTDOWN");  
#     }  
#   
# }

JuniorSatanas, meu Dao, está assim [como está o citado por vc]:

public void altera(Usuario usuario) { Transaction tx = session.beginTransaction(); session.update(usuario); session.flush(); tx.commit(); session.close(); }

minha duvida é no controller… acho que me expressei mal…

Aff… Cada uma que dá duas… Agora ao apertar salvar…

e agora josé? cada hora aparece um erro novo, assim eu fico expert…

Por que controlar a transaçao manual e ainda fechar a session se o vraptor (na verdade o spring por baixo) já faz isso para você?

Tente alterar seus métodos apenas para isso e anote seus daos/repositories para @Component.

public void altera(Usuario usuario) { session.update(usuario); }

o que vc tá colocando no jsp? provavelmente tem algum erro de digitação no formulário…

[quote=garcia-jj]Por que controlar a transaçao manual e ainda fechar a session se o vraptor (na verdade o spring por baixo) já faz isso para você?

Tente alterar seus métodos apenas para isso e anote seus daos/repositories para @Component.

public void altera(Usuario usuario) { session.update(usuario); } [/quote]

Garcia-jj, mudei o método, e minha classe já estava anotada com @component, mesmo assim persiste o erro…

[code]<%@page contentType=“text/html” pageEncoding=“UTF-8”%>
<%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>

Editar Usuário "/>
        </div>
        <div id="col1">
            <h1>aki vai uma...</h1>
        </div>
        <div id="col2">
            <h1>aki vai outra...</h1>
        </div>
        <div id="centro">
            <ul style="color: #FF0000">
                <c:forEach items="${errors}" var="error">
                    <li>${error.category } - ${error.message }</li>
                </c:forEach>
            </ul>
            <form id="editaUsFrm" action="<c:url value="/usuario/{usuario.login}"/>" method="POST">
                <table align="center" cellpadding="2" cellspacing="2" style="font-size: small">
                    
                    <tr>
                        <td><label for="nome">Nome:</label></td>
                        <td><input id="nome" type="text" name="usuario.nome" value="${usuario.nome}"/></td>
                    </tr
                    <tr>
                        <td><label for="login">Login:</label></td>
                        <td><input id="login" type="text" name="usuario.login" value="${usuario.login}"/></td>
                    </tr>
                    <tr>
                        <td><label for="senha">Senha:</label></td>
                        <td><input id="senha" type="password" name="usuario.senha" value="${usuario.senha}"/></td>
                    </tr> 
                    <tr>
                        <td><label for="confirma_senha">Confirme a senha:</label></td>
                        <td><input id="confirma_senha" name="confirma_senha" type="password" /></td>
                    </tr>
                    <tr></tr>
                    <tr></tr>
                    <tr>
                        <td colspan="2"><button type="submit" name="_method" value="PUT">Editar</button></td>
                    </tr>
                </table>
            </form>
        </div>
    </div>
</body>
[/code]

O resultado de %7Busuario.login%7D é {usuario.login}.

Em que momento há essa tal troca que você citou? Essa troca é na URL após algum redirecionamento ou esse valor está em algum dos parametros do método?

Não entendi muito bem isso aqui…

[quote]@Path("/usuario/{usuario.login}")
@Put
public void altera(Usuario usuario, String login) { [/quote]

Você usa como parametro rest usuario.login com o login do usuário, e ao mesmo tempo tem um parametro login… Não há algo errado nisso?

no action do form:

 <form id="editaUsFrm"  action="<c:url value="/usuario/{usuario.login}"/>" method="POST">  

deveria ser:

 <form id="editaUsFrm"  action="<c:url value="/usuario/${usuario.login}"/>" method="POST">  

ou seja, faltou um $

[quote=garcia-jj]O resultado de %7Busuario.login%7D é {usuario.login}.

Em que momento há essa tal troca que você citou? Essa troca é na URL após algum redirecionamento ou esse valor está em algum dos parametros do método?[/quote]

Cerveja bem garcia-jj [tem q ter bom humor nessas horas de angustia, aff…], na hr em que eu clico no botão alterar, se der erro ele deve me retornar a propria página edita.jsp, qnd ele me faz esse retorno o login já foi modificado pra isso dai.

quanto a isso aki:

[quote=garcia-jj]@Path("/usuario/{usuario.login}")
@Put
public void altera(Usuario usuario, String login) { [/quote]

está assim agora:

@Path("/usuario/{usuario.login}") @Put public void altera(Usuario usuario) { if (usuario.getNome().length() < 3 || usuario.getNome() == null) { validator.add(new ValidationMessage( "O campo Nome é obrigatório e precisa ter mais de 3 caracteres", "usuario.nome")); } if (usuario.getSenha().length() < 5 || usuario.getSenha().length() > 10 || usuario.getSenha() == null) { validator.add(new ValidationMessage( "O campo Senha é obrigatório e precisa ter entre 5 e 10 caracteres", "usuario.senha")); } validator.onErrorUse(Results.page()).of(UsuarioController.class).edita(); dao.altera(usuario); result.redirectTo(UsuarioController.class).lista(); }

entendeu?

[quote=Lucas Cavalcanti]no action do form:

 <form id="editaUsFrm"  action="<c:url value="/usuario/{usuario.login}"/>" method="POST">  

deveria ser:

 <form id="editaUsFrm"  action="<c:url value="/usuario/${usuario.login}"/>" method="POST">  

ou seja, faltou um $[/quote]

Lucas, Muito obrigado… caraca um erro besta da merda, falta de atenção…
desculpa aew!

agora rodou de boa!
vlw.

Obrigado tbm garcia-jj!

Esses pequenos erros de ortografia são muito complicados de ver. As vezes você vicia no código e não nota essas coisinhas. Basta alguém que está de fora para ver isso, hehehehe.

Abraços

[quote=garcia-jj]Esses pequenos erros de ortografia são muito complicados de ver. As vezes você vicia no código e não nota essas coisinhas. Basta alguém que está de fora para ver isso, hehehehe.

Abraços[/quote]

é mas…
Atenção… Este é o elemento adversário, que por falta dele, constantemente ameaça destruir seus códigos!
assim já dizia: Ramon.Onix.

obrigado ai pela paciência!