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

13 respostas
Ramon.Onix

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

@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();
    }
@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:
%7Busuario.login%7D

13 Respostas

juniorsatanas

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");  
#     }  
#   
# }
Ramon.Onix

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…

Ramon.Onix

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

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

G

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); }

Lucas_Cavalcanti

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

Ramon.Onix
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);  
 }

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

Lucas Cavalcanti:
Bom aki está o meu jsp edita.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Editar Usuário</title>
        <link rel="stylesheet" type="text/css" href="<c:url value="/css/estilos.css"/>"/>
        <script type="text/javascript" src="<c:url value="/js/jquery-1.3.2.min.js"/>"></script>
        <script type="text/javascript" src="<c:url value="/js/jquery.validate.js"/>"></script>
        <script type="text/javascript" src="<c:url value="/js/valForm.js"/>"></script>
    </head>
    <body>
        <div id="conteudo">
            <div id="topo">

            </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>
</html>
G

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?

G

Não entendi muito bem isso aqui…

<blockquote><a class="mention" href="/u/path">@Path</a>("/usuario/{usuario.login}")

@Put

public void altera(Usuario usuario, String login) {  </blockquote>

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?

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 $

Ramon.Onix

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?

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:

<blockquote><div class="quote-author">garcia-jj:</div><a class="mention" href="/u/path">@Path</a>("/usuario/{usuario.login}")

@Put

public void altera(Usuario usuario, String login) { </blockquote>

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?

Ramon.Onix

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 $

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

agora rodou de boa!
vlw.

Obrigado tbm garcia-jj!

G

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

Ramon.Onix

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

é 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!

Criado 11 de fevereiro de 2010
Ultima resposta 12 de fev. de 2010
Respostas 13
Participantes 4