1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Problema com Select - Objeto chega com propriedades vazias

Galera,

Estou usando um select na minha tela que faz referência a uma proriedade relacionada ao model que eu estou tentando persistir.

public class Imovel{

    //...

    @ManyToOne
    private TipoImovel tipoImovel;

    //...
}
<form action="${pageContext.request.contextPath}/imoveis" method="post">

    <select name="imovel.tipoImovel.id">
        <option value=""><fmt:message key="selecione" /></option>
        <c:forEach var="tipoImovel" items="${tipoImovelList}">
            <option value="${tipoImovel.id}"
                <c:if test = "${imovel.tipoImovel.id == tipoImovel.id}">selected="true"</c:if>> ${tipoImovel.sigla} - ${tipoImovel.nome}
            </option>
        </c:forEach>
    </select>

</form>

Neste cenário, a grande questão é que o TipoImóvel não é obrigatório e quando ele não é selecionado o que chega no controller é um objeto com as propriedades nulas e não com um objeto null. Ao persistir, estoura o erro (com razão):

java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : br.com.sgionline.model.Imovel.tipoImovel -> br.com.sgionline.model.Imovel

Estou fazendo alguma coisa errada? Ou existe alguma forma de dizer ao request para só considerar os parametros que vem ".id" e não for assim deixar o objeto "null"?

  • Esse tipoImovelList, como está sendo carregado? Já viu se estão vindo os dados do banco?

    Roger75   29 de ago de 2014
  • @Roger75, considere que o TipoImovel pode ser nulo. E o problema está exatamente nesta situação.

    pvrsouza   29 de ago de 2014
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags vraptor jsp ou faça a sua própria pergunta.