[VRAPTOR] Bind de form para um componente

8 respostas
aspmedeiros

É possível fazer um bind de form html para um objeto que é um @component ?

Tipo assim :

<form action="alguma action">
       <input type="text" name="configuracao.valorQualquer" />
 </form>

E a classe seria :

@Component
   public class Configuracao {
         
         private Environment env;
         private String valorQualquer;

         public Configuracao(Environment env){
               this.env = env;
         }

         //get e set para valorQualquer
        
    }

Creio que abordagem padrão não seria possível devido ao construtor…
A solução seria algo como um interceptor?

8 Respostas

Lucas_Cavalcanti

depende do que vc quer fazer… não dá pra fazer isso em um componente qualquer…

o jeito padrão seria criar um controller que recebe a requisição e muda o valor dentro do componente desejado.

aspmedeiros

Eu uso um controller que recebe esse componente tava querendo implementar um espécie de active record para salvar umas configurações…
aew ficaria mais ou menos assim:

@Resource
    public class MeuController {
       
            @Post("/configuracao")
            public void salva(Configuracao configuracao){
                 configuracao.salva();
            }

    }
Lucas_Cavalcanti

bom, do jeito que tá agora, ou o VRaptor injeta essa classe, ou ele popula com parâmetros da request, não dá pra fazer de uma vez só.

então vc faria algo do tipo receber a configuração no construtor, e outra configuração no método e copiar os dados de uma pra outra.

aspmedeiros

Então seria um sendo @Component e um sem?

Lucas_Cavalcanti

não precisa ser duas classes, é só usar a mesma.

aspmedeiros

Pois é, mas o meu form está assim

<form action="alguma action">  
      <input type="text" name="configuracao.valorQualquer" value="${configuracao.valorQualquer}"/>  
</form>

Por eu tá usando EL eu preciso de um construtor vazio certo?

Aew se eu colocar um construtor vazio o vraptor não sabe qual usar correto?

@Component  
    public class Configuracao {  
            
          private Environment env;  
          private String valorQualquer; 

          public Configuracao(){}
      
          public Configuracao(Environment env){  
                this.env = env;  
          }  
      
          //get e set para valorQualquer  
           
    }
Lucas_Cavalcanti

não é por vc estar usando EL, é pq o VRaptor dá new usando construtor sem argumento qdo tá populando os parâmetros.

bom, se forem poucas configurações, talvez seja melhor receber os parâmetro direto… senão talvez seja melhor extrair uma classe com os valores que podem ser editados.

aspmedeiros

Hummm…entendi…vlw aew Lucas

Criado 4 de janeiro de 2012
Ultima resposta 5 de jan. de 2012
Respostas 8
Participantes 2