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

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!

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();
         //...
     }
}

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!

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

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

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

Massa! Valeu lucas, obrigado cara!