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!