2010-01-12 5 views
2

Ajax 요청을 사용하여 WebFlow의 다음 상태로 전환하려고합니다. 그러나 그것은 다음 주에 GSP를 기대하면서 동일한 상태에 머물러 있으며 해당 주에 대한 응답으로 GSP를 반환합니다.Grails WebFlow with Ajax

$.ajax({ 
      type: "POST", 
      url: "/UN/user/gettingStartedAjax", 
      success: function(data) { 
       $("#wizardDiv").html(data); 
      } 
}); 

각 상태에 대한의 GSP (유량 1, flow2, flow3)이 포함되어 아약스 나는 상태 전환을 만드는 중이 호출되어 다음

def gettingStartedAjaxFlow = {  
     flow1 { 
      on("next") {     
       println "flow1" 
      }.to("flow2") 
      on("skip").to("flow2") 
     } 

     flow2 { 
      on("next") { 
       println "flow2" 
      }.to("flow3") 
      on("skip").to("flow3") 
     } 

     flow3 {   
      on("next"){    
       println "flow3" 
      }.to("finish") 
      on("skip").to("finish") 

      finish { 
       redirect(action:"index") 
      } 
     } 
} 

:

다음은 WebFlow 코드 다음에 remoteForm &이 필요한 코드 조각을 작성하고 제출 단추를 건너 뛰어 다음 상태로 전환하면 결과적으로 "wizardDiv"div가 업데이트됩니다. 유량 1 상태에 대한 GSP 조각은 다음과 같은 :

<g:formRemote name="flow1Form" url="[controller:'user', action:'gettingStartedAjax']" update="wizardDiv"> 
    <p>You are in flow 1</p> 
    <g:submitButton name="next" value="Next Flow" /> 
    <g:submitButton name="skip" value="Skip Flow" />  
</g:formRemote> 

답변

2

뿐만 아니라, 당신이 당신의 버튼을 _eventId_next 이름이 있는지 확인해야합니다 (Daxon 게시로) 실행 추적을 유지하고 _eventId_s 자다. g : submitbutton은 보통 당신을 위해 그렇게하기에 충분히 영리하지만 remoteForm 내부에는 없을 수도 있습니다.

또한 웹 플로우 코드는 flowExecutionKey가 아닌 매개 변수 실행을 사용합니다. Grails 버전을 사용하고 있습니까?

+0

그래서 내 Gsp의 예를 들어 줄 수 있습니까? Ajax 호출 내에서 응답을 처리하고 Ajax 호출 내에서 링크를 인쇄하면 "매개 변수 실행"에 대해 더 자세히 설명 할 수 있습니다. – Daxon

+0

주요 트릭은 단추를 처리하는 것입니다. Grails가 숨겨진 입력 변수를 이미 실행하고 있기 때문에 flowExecutionKey를 잡을 필요가 없습니다. 그러나 직렬화 된 양식 데이터를 사용하여 아약스를 게시하는 동안 올바른 버튼 이름을 보내야합니다. 다음에 클릭하면 게시물 데이터에 _eventId_next를 보냅니다. – kaychaks

+0

@kaychaks - 그래서 내가하는 모든 일은 올바른 URL을 가지고 있다는 것입니다. "_eventid_next"아약스 POST/GET에서, 그리고 그게 뭐죠? 그래서 "? execution = e1s1"을 제출하고 더 많은 아약스 요청을 보내면 어떻게 될지 신경 쓸 필요가 없습니다. – Daxon

3

나는 거의 그것을 생각, 같은 문제에 붙어있어, 당신이해야 할 일

, webflow "_flowExecutionKey"Grails의를 다시 전송된다 계속 현재 상태를 추적합니다.

Google이 찾아낸 유일한 괜찮은 결과 인 this을 보았을 것입니다.

나는

<input id="flowExecutionKey" name="_flowExecutionKey" value="${request.flowExecutionKey}" size="100"/> 

, 템플릿을 채우고 다시 입력 태그로 전송 작업에 아약스 요청을 전송하지만 당신은 "_flowExecutionKey로 다시 JSON과 같은 마크 업 사원을 보낼 시도 할 수 "내 두 센트

의 다시 전송할 데이터,

과 함께

0

적어도 하나의 단일 작업에 대해 grails 2.5.3에서 작동하는 솔루션입니다. 버튼의 ID와 이름은 접두어로 "eventId"을 포함하도록 자동으로 수정되지만 입력 매개 변수로 _event_id를 수동으로 추가하지 않으면 여전히 작동하지 않습니다. 그러나 여러 가지 가능한 이벤트에 대해 이것이 어떻게 작동하는지 잘 모르겠습니다.

<g:formRemote name="flow1Form" url="[controller:'user', action:'gettingStartedAjax']" update="wizardDiv"> 

<input type="hidden" id="execution" name="execution" value="${request.flowExecutionKey}"/> 
<input type="hidden" id="_eventId" name="_eventId" value="next"/> 

<fieldset class="form"> 
</fieldset> 

<fieldset class="buttons"> 
    <g:submitButton name="next" value="Next flow"/> 
</fieldset> 

</g:formRemote>