[DuvidaFormulário divididos em passos.
25/02/2011 00:00
0
Ola Pessoal,
Gostaria de saber se existe alguma maneira fácil(com ou sem plugins) de fazer um formulário dividido em passos.

Exemplo:

Um usuário tem dados cadastrais, dados pessoais, dados de pagamento.

Gostaria que em uma tela ele digitasse os dados cadastrais, apertasse em próximo e fosse para os dados pessoais, em próximo para os dados de pagamento.

Até ai pensei em fazer assim, chama o create dos dados cadastreis, salva e redireciona para o create dos dados pessoais e etc...

Porem essa minha tentativa foi frustada pois eu quero que se o usuário desista no ultimo passo nada seja salvo.
a minha outra tentativa era ir colocando todos os parâmetros na seção e depois salvar.

É essa que estou usando agora, porem com isso eu perco a validação dos dados, caso o usuário tenha digitado algo fora da regra no step1 só iria descobrir no ultimo step.

Ai eu teria que criar passos intermediários para verificar isso, resumo: Está ficando cada vez mais complicado e eu comecei a achar que estava reinventando a roda, visto que existem vários sites que usam esse tipo de cadastro.

Vocês teriam um jeito mais fácil/melhor que poderia me ajudar?

Obrigado
Tags: Grails


0
Olá msmdark.

Talvez uma opção seja o uso de abas (tabs).

Você pode ver um exemplo na página do plugin RichUI:
http://www.grails.org/plugin/richui#TabView

Na página do JQueryUI você também encontra exemplos:
http://jqueryui.com/demos/tabs/
25/02/2011 00:00


0
Sim, Abas seriam uma solução, mas como eu poderia dividir os forms entre elas?

Exemplo.

O usuário está na aba um, preenche, clica em próximo preenche, clica em próximo, preenche.

Eu continuaria tendo que validar as coisas em cada passagem de aba e só no final salvar tudo.
25/02/2011 00:00


0
Tenho uma idéia para resolver seu problema. Veja só se ajuda. Vc cria uma classe que abrigue as classes que representam os 3 steps.


class Cadastro {

DadosCadastrais dadosCadastrais
DadosPessoais dadosPessoais
DadosFinanceiros dadosFinanceiros

}


A cada step vc valida os campos dentro do controller e guarda num objeto.


class DadosCadastraisController {

def create = {

valida(params)

def dadosCadastrais = new DadosCadastrais()
dadosCadastrais.nome = params.nome
...

def cadastro = new Cadastro()

cadastro.dadosCadastrais = dadosCadastrais

redirect(controller:"dadosPessoais",action:"new", params:[Cadastro : cadastro])

}
}


Aí vc põe um input hidden dentro do form para guardar a tralha toda na página. Ou então pega este objeto e põe na sessão. Afinal já foi validado mesmo.

Obs: Pus o código abaixo pois não pensei numa solução melhor para mudar de controller e renderizar enviando o objeto cadastro como parametro. To cheio de sono ><


class DadosPessoaisController {

def new = {
[cadastro &#58; params.cadastro]
}
}



<html>
...
<g&#58;hiddenField name=&quot;cadastro&quot; value=&quot;${cadastro}&quot; />
...
</html>


Agora é só continuar o que foi feito no início.


class DadosPessoaisController {
...

def create = {

valida(params)

def cadastro = params.cadastro
def dadosPessoais = new DadosPessoais()

dadosPessoais.qualquerCoisa = params.qualquerCoisa
...

cadastro.dadosPessoais = dadosPessoais

redirect(controller&#58;&quot;dadosFinanceiros&quot;,action&#58;&quot;new&quot;, params&#58;[Cadastro &#58; cadastro])
}
}


No controller do último step basta vc dar um cadastro.save() e pronto, tudo será salvo. Não sei se a lógica vai te atender. Tb não sei se entendi o problema direito e provavelmente tem erros de sintaxe. Mas a idéia pode ser útil para vc. Nem precisa de ajax. E vc pode tanto usar a sessão como usar o input hidden.

Espero ter ajudado xD
26/02/2011 00:00


0
Bom Bom,
Gostei, vou tentar aqui para ver como fica =)
Obrigado.
26/02/2011 00:00


0
Caraca maluco, vc não dorme não?? Postando 6 da manhã xD.

Vê aí e fale como ficou por favor.
26/02/2011 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto