Bom dia caros, to fazendo um trabalho com vraptor aki e estou com problemas de pegar um objeto da jsp, segue o codigo:
<form id="contactform" class="rounded" action="<c:url value="/enviar"/>" method="post">
<center>
<h2>Cadastro</h2>
</center>
<div class="field">
<label for="nome" >Nome:</label>
<input type="text" name="cliente.nome" class="input" id="nome" value="${clienteDTO.nome }"/>
</div>
<div class="field">
<label for="email" >Email:</label>
<input type="text" name="cliente.email" class="input" id="email" value="${clienteDTO.email }" />
</div>
<div class="field">
<label for="comentario">Comentario:</label>
<textarea class="input" name="cliente.comentario" id="comentario" rows="10" cols="50">
</textarea>
</div>
<!-- Button -->
<div id="botao">
<input type="submit" value="Enviar" class="button" />
</div>
</form>
E aqui meu IndexController
[code]@Resource
public class IndexController {
private final FacadeAdministrador facade;
private final Result result;
public IndexController(FacadeAdministrador facade,Result result) {
this.facade = facade;
this.result = result;
}
@Path("/")
public void formularioCliente() {
}
@Post("/enviar")
public void enviar(ClienteDTO cliente){
System.out.println(cliente);
//facade.inserir(cliente);
}[/code]
E o objeto ta vindo null da jsp, alguem pode me ajudar com isso?
Cara eu dei uma olhada no manal do VRaptor, e bem na parte que ele recebe NULL quando vc utiliza injeção de dependencias em métodos (que utilizam redirect ou forward)
http://vraptor.caelum.com.br/pt/docs/componentes/
Também é possível usar injeção de dependências em métodos. No entanto quando houver redirect ou forward para métodos com injeção desta forma, os objetos não serão injetados, recebendo NULL.
@Resource
public class ClienteController {
@Post
public void adiciona(Cliente cliente, ClienteDao dao) {
dao.adiciona(cliente);
}
}
De qualquer forma, tenta tirar o @Component do seu ClienteDTO ou se não tiver coloca!
Coloquei o @Component mas sem sucesso, deve ser algum detalhe…
So lembrando que meu ClienteDTO é meu “model”
Voce pode postar o FacadeAdministrador?
[code]@Component
public final class FacadeAdministrador implements FacadeAdministradorInterface {
private static final long serialVersionUID = -3478573633778398564L;
/**
* Atributo referente a criação de Log da classe.
*/
private transient static Logger logger = Logger
.getLogger(FacadeAdministrador.class.getName());
// ############\\
// * Obs: Criar uma variável para cada classe e reescrever no construtor
private ClienteDelegateInterface clienteDelegate;
public FacadeAdministrador(){
clienteDelegate = ClienteDelegate.getInstance();
}
//#######CLIENTE######\\
public void inserir(ClienteDTO clienteDto) {
clienteDelegate.inserir(clienteDto);
}
public void alterar(ClienteDTO clienteDto) {
clienteDelegate.alterar(clienteDto);
}
public void excluir(ClienteDTO clienteDto) {
clienteDelegate.excluir(clienteDto);
}
public List<ClienteDTO> listarTodosClientes() {
return clienteDelegate.listarTodosClientes();
}
public ClienteDTO carregarCliente(Long id){
return clienteDelegate.carregarCliente(id);
}
public List<ClienteDTO> buscarPorNomeCliente(String nome){
return clienteDelegate.buscarPorNomeCliente(nome);
}[/code]
Eu ja fiz um teste criando um objeto pelo contrutor do ClienteDTO e ele grava no banco normal, o problema e q to moscando em algum detalhe pra pegar o obj da jsp
Estranho, parece que está tudo certo, a única coisa diferente é o Final da classe e o implements que vc colocou, fora isso tá tudo normal!!! Vc pode colocar o model ClienteDTO tambem?
[code]public class ClienteDTO extends AbstractModelDTO {
private String email;
private String assunto;
private String comentario;
public ClienteDTO(Long id, String nome, String email, String comentario, String assunto) {
super(id, nome);
this.email = email;
this.comentario = comentario;
this.assunto = assunto;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getComentario() {
return comentario;
}
public void setComentario(String comentario) {
this.comentario = comentario;
}
public String getAssunto() {
return assunto;
}
public void setAssunto(String assunto) {
this.assunto = assunto;
}
@Override
public String toString() {
return "ClienteDTO [email=" + email + ", assunto=" + assunto
+ ", comentario=" + comentario + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((assunto == null) ? 0 : assunto.hashCode());
result = prime * result
+ ((comentario == null) ? 0 : comentario.hashCode());
result = prime * result + ((email == null) ? 0 : email.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
ClienteDTO other = (ClienteDTO) obj;
if (assunto == null) {
if (other.assunto != null)
return false;
} else if (!assunto.equals(other.assunto))
return false;
if (comentario == null) {
if (other.comentario != null)
return false;
} else if (!comentario.equals(other.comentario))
return false;
if (email == null) {
if (other.email != null)
return false;
} else if (!email.equals(other.email))
return false;
return true;
}[/code]
Tenta fazer um teste, adiciona um construtor vazio para o VRaptor poder instanciar, e (talvez já até tenha) adiciona o @Component.
public ClienteDTO(){};
nossa qndo vc flo ja percebi q era isso, show!!
Vlw mano foi so add o contrutor vazio no meu DTO, vlw!!
Opa, é isso ai manow ^^ por nada!!!