(VRaptor) Um formulário, mas objetos diferentes no modelo para cada situação

6 respostas
alias

Olá amigos,

Por gentileza, olhem só essa situação. Tenho um formulário que apresentará campos diferentes dependendo do perfil do usuário que vai se cadastrar. Algo como:

<form action="controller/metodo">
   <c:if test="${perfil = 'X'}>
       <input type="text" name="usuario1.campo1" />
   </c:if>
   <c:if test="${perfil = 'Y'}>
       <input type="text" name="usuario2.campo2" />
   </c:if>
</form>

Mas no modelo esses dois perfis são definidos em entidades diferentes, que tem a mesma herança. Não testei ainda, mas me ocorre que não vou conseguir receber os dados desses dois objetos no mesmo método no controller. Procede?

Me parece que o que nao vou conseguir fazer isso aqui:

@Resource
public class Controller {
    
    @Post
    public void metodo(Usuario usuario){ //Usuario seria a superclasse dos dois tipos de usuario
    }
}

Pensei nessa alternativa,

@Resource
public class Controller {
    
    @Post
    public void metodo1(Usuario1 usuario){
    }
   
    @Post
    public void metodo2(Usuario2 usuario){
    }
}

Mais ou menos como um cenário de pessoa física e juridica, que herdam uma classe comum. Preciso mesmo de dois métodos no controller pra receber cada um, ou há alguma “mágica” que dê pra fazer?

Aproveitando o gancho, o VRaptor conseguiria “magicamente” fazer isso aqui

<form>
    <input name="usuario.endereco.rua" type="text"/>
</form>

É possível já receber no controller o Usuario, com o atributo endereco instanciado, e já com o atributo rua preenchido? (seria lindo :stuck_out_tongue: )

Valeu amigos!

6 Respostas

Lucas_Cavalcanti

se vc está com a última versão teoricamente funciona vc fazer o seguinte:

<input type="hidden" name="usuario" value="Usuario1"/>

todos os outros inputs com o name começando com usuario.

e criar um converter:

@Converts(Usuario.class)
public class UsuarioConverter implements Converter<Usuario> { // do vraptor

    convert(String value, .....) {
         if ("Usuario1".equals(value)) return new Usuario1();
         //...
     }
}
alias

legal lucas! mas e os outros campos da requisição, eu teria que preencher manualmente no meu objeto dentro do converter, ou o VRaptor preenche usando a instancia retornada pelo metodo convert?

E esse detalhe aqui que eu havia questionado, dá pra fazer?

valeu!

Lucas_Cavalcanti

sim, o vraptor vai preencher os outros atributos após chamar o converter, sem problemas.

alias

sensacional mano, que da hora…muito melhor que “sujar” o controller com os dois métodos pra atender os dois cenários.

sobre a outra dúvida ai, o do “atributo dentro do atributo” (), desse jeito aí funciona?, o VRaptor consegue colocar o valor lá?

valeu pelo suporte ai lucas

Lucas_Cavalcanti

desde que tenham os getters e setters respectivos, sim :wink:

alias

Massa! Valeu lucas, obrigado cara!

Criado 18 de julho de 2012
Ultima resposta 18 de jul. de 2012
Respostas 6
Participantes 2