문제

나는 아직도 Grails에 꽤 새로운 것이고 온라인 조사를 개발하고 있습니다. 나는 웹 흐름을 사용하기로 결정했고 나는 많은 문제로 진행되고있다. GSP 페이지에서 유량 컨트롤러로 의사 ID를 전달하려고합니다. 이는 다른 컨트롤러 조치에서 완벽하게 작동하지만 플로우의 시작 상태에 대한 조치를 취할 때마다 항상 동일한 오류가 발생합니다. 나는이 똑같은 방식으로이를 수행하는 텍스트 책에서 튜토리얼을 따라 갔고 아이디어가 부족합니다.

여기에 GSP 페이지에서 링크가 있습니다.

<g:link controller="surveyPage" action="beginTest" id="${survey.id}">
${survey.surveyName}
</g:link>
.

여기에서 시작 상태가있는 흐름

def beginTestFlow = {

    showSurvey{

        def survey = Survey.get(params.id)

        on("cancel").to "cancelSurvey"
        on("continueSurvey").to "nextQuestion"

    }

    cancelSurvey { redirect(controller:"surveyPage") }
}
.

항상 예외가 발생합니다.

인수 유형 라인의 불일치

def survey = Survey.get(params.id)
.

또한 시도했습니다 :

flow.survey = Survey.get(params.id)
.

또는 심지어 :

flow.survey = Survey.get(session.survey.id)
.

항상 동일한 오류가 발생합니다. 또한 Class Survey는 Serializable을 구현하는지 확인했습니다. 같은 코드를 동일한 컨트롤러로 다른 동작으로 복사하여 붙여 넣었으며 완벽하게 작동합니다. 웹 흐름과 다른 항목에 대한 아이디어는 무엇입니까?

도움이 되었습니까?

해결책

상태 정의에 직접 코드를 넣을 수는 없으며, 액션 상태 또는 onEntry 블록을 사용해야합니다

def beginTestFlow = {
    showSurvey{
        onEntry {
            flow.survey = Survey.get(params.id)
        }
        on("cancel").to "cancelSurvey"
        on("continueSurvey").to "nextQuestion"
    }

    cancelSurvey { redirect(controller:"surveyPage") }
}
.

onEntry 블록은 showSurvey 상태가 입력 될 때마다 실행됩니다.대신 전체 흐름의 시작시 한 번만 한 번만 실행되도록하려면 (예를 들어 나중에 전환이 초기 상태가 다시 입력되는 경우) 플로우 레벨 onStart 블록을 대신 사용할 수 있습니다.

def beginTestFlow = {
    onStart {
        flow.survey = Survey.get(params.id)
    }
    showSurvey{
        on("cancel").to "cancelSurvey"
        // ...
.

다른 팁

Ivo Houbrechts Grails 2.0 WebFlow에 대한 Excelent 튜토리얼을 썼습니다.여기에서 읽을 수 있습니다 :

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top