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?

Foi útil?

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:

http://livesnippets.cloudfoundry.com/docs/guide/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top