[RESOLVIDO]VRaptor recebendo obj null da JSP

9 respostas
douglascst90

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

E o objeto ta vindo null da jsp, alguem pode me ajudar com isso?

9 Respostas

Mickdark

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!

douglascst90

Coloquei o @Component mas sem sucesso, deve ser algum detalhe…

So lembrando que meu ClienteDTO é meu “model”

Mickdark

Voce pode postar o FacadeAdministrador?

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

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

Mickdark

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?

douglascst90
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;
	}
Mickdark

Tenta fazer um teste, adiciona um construtor vazio para o VRaptor poder instanciar, e (talvez já até tenha) adiciona o @Component.

public ClienteDTO(){};
douglascst90

nossa qndo vc flo ja percebi q era isso, show!!

Vlw mano foi so add o contrutor vazio no meu DTO, vlw!!

Mickdark

Opa, é isso ai manow ^^ por nada!!!

Criado 23 de abril de 2013
Ultima resposta 23 de abr. de 2013
Respostas 9
Participantes 2