Grails 2.0.4 webflow "" discordância de tipo de exceção
-
11-12-2019 - |
Pergunta
Eu ainda sou muito novo para Grails e estou desenvolvendo uma pesquisa on-line.Eu decidi usar o web fluxo e fui correndo em muitas questões.Eu estou tentando passar o questionário de identificação do spg página para o controlador de fluxo.Isso funciona perfeitamente bem em qualquer outro controlador de ação, mas sempre que eu faço isso para a ação para o estado inicial do fluxo-me sempre o mesmo erro.Eu segui um tutorial em um livro de texto que faz isso exatamente da mesma forma e eu estou correndo fora das idéias.
aqui está o link do spg página:
<g:link controller="surveyPage" action="beginTest" id="${survey.id}">
${survey.surveyName}
</g:link>
e aqui é o fluxo, com o início do estado
def beginTestFlow = {
showSurvey{
def survey = Survey.get(params.id)
on("cancel").to "cancelSurvey"
on("continueSurvey").to "nextQuestion"
}
cancelSurvey { redirect(controller:"surveyPage") }
}
ela sempre lança a exceção:
incompatibilidade de tipo de argumento na linha com
def survey = Survey.get(params.id)
Eu também tentei:
flow.survey = Survey.get(params.id)
ou ainda:
flow.survey = Survey.get(session.survey.id)
sempre o mesmo erro.Também, tenho a certeza de classe Inquérito implementa Serializable.Que eu tenha copiado e colado o mesmo código para uma ação diferente com o mesmo controlador e ele funciona perfeitamente.Quaisquer ideias para o que é diferente com o web fluxo?
Solução
Você não pode colocar o código como que diretamente dentro de um estado de definição, você precisará usar uma ação de estado ou um onEntry
bloco
def beginTestFlow = {
showSurvey{
onEntry {
flow.survey = Survey.get(params.id)
}
on("cancel").to "cancelSurvey"
on("continueSurvey").to "nextQuestion"
}
cancelSurvey { redirect(controller:"surveyPage") }
}
O onEntry
bloco será disparado toda vez que o showSurvey
o estado está inserido.Se, em vez disso, você quer um pouco de lógica para ser executado apenas uma vez no início de todo o fluxo (por exemplo, se algum tempo depois de transição pode re-introduza o estado inicial), você pode usar um fluxo de nível onStart
bloco em vez disso:
def beginTestFlow = {
onStart {
flow.survey = Survey.get(params.id)
}
showSurvey{
on("cancel").to "cancelSurvey"
// ...
Outras dicas
Ivo Houbrechts escreveu um excelente tutorial sobre grails 2.0 webflow.Você pode lê-lo aqui: