JSF 통합으로 스프링 웹 흐름 전환을 활성화하기위한 JavaScript 양식 제출

StackOverflow https://stackoverflow.com/questions/381434

문제

Spring WebFlow 2, Facelets 및 JSF를 사용하여 응용 프로그램을 개발하고 있습니다. 내 흐름 중 하나에는 특정 이벤트에서 양식 제출을 트리거 해야하는 페이지가 있습니다. 각각의 다른 행동에 대해, 다른 견해가 제시되어야합니다. 따라서 제출물을 수행하기 위해 다음 JavaScript 코드를 활성화하려고합니다.

function myFormSubmit( eventId ) {
   var formAction = document.myForm.action;
   document.myForm.action = formAction + '&_eventId=' + eventId;
   document.myForm.submit();
}

불행히도, 이것은 내 흐름에서 요청 된 전환을 유발하지 않습니다. 페이지가 변경되지 않습니다. 누구든지 이것을 다루는 방법을 알고 있습니까?

고마워요, 알렉산드르

도움이 되었습니까?

해결책 3

스프링 웹 플로우 포럼에 솔루션이 있습니다. Jeremy Grelle에 따르면 Spring 웹 플로우를 JSF에 통합 할 때 "_eventID"매개 변수의 제출은 전환을 유발하지 않습니다. 그가 준 해결책은 "_eventID"매개 변수가 전송 될 때 JSF 동작을 생성하는 JSF Phaselistener를 만드는 것이 었습니다.

Phaselistener 코드는 볼 수 있습니다 http://forum.springsource.org/showthread.php?p=219358#post219358.

다른 팁

sringfaceletsssf에 대해 아무것도 모르지만 이벤트 핸들러가 아마 반환해야한다고 생각합니다. true. 그렇지 않으면 브라우저가 양식을 제출하지 않습니다.

그래서:

function myFormSubmit( eventId ) {
   var formAction = document.myForm.action;
   document.myForm.action = formAction + '&_eventId=' + eventId;
   document.myForm.submit();
   return true;
}

면밀히 검사하면이 코드에 많은 문제가 있습니다.

document.myform.action은 요소를 얻는 비표준 방법입니다. 더 나은 브라우저 방법은 다음과 같습니다.

document.getElementById('myFormId');

양식 조치 URL에 암페어를 맹목적으로 추가하면 이미 다른 URL 매개 변수가 있다고 가정하므로 URL 다음에 이미 물음표가 있습니다. 그렇지 않은 경우 다음 줄이 끊어집니다.

document.myForm.action = formAction + '&_eventId=' + eventId;

마지막으로, 만약에 당신은이 기능을 OnSubmit 핸들러라고 부르고 있습니다. myForm.submit() 방법

양식 수정은 양식 제출에 정보를 추가하는 매우 열악한 방법입니다. 나는 당신이 당신의 eventID로 채울 수있는 양식에 숨겨진 입력을 배치하는 것이 좋습니다.

Get Params 또는 Post Params 에서이 매개 변수를 찾고 있습니까? 게시물에 나타나지 않습니다.

업데이트:

좋아, 설명하려면 이것을 시도하십시오 ...

이 작업을 수행하도록 기능을 변경하십시오.

function myFormSubmit( eventId ) {
   var formAction = document.myForm.action;
   //document.myForm.action = formAction + '&_eventId=' + eventId;
     var myAction = document.createElement('input');
     myAction.setAttribute('name', '_eventId');
     myAction.setAttribute('type', 'hidden');
     myAction.setAttribute('value', eventId);
     document.myForm.appendChild(myAction);
   document.myForm.submit();
}

(비)* 브라우저에서 테스트하고 작동하는지 확인하십시오. 그렇다면 get vs. post param이 문제입니다.

* non-IE: trying to set the name or type in IE will FAIL, thus don't test there.

SWF와 함께 제공되는 스프링 페이스 구성 요소를 사용할 수없는 이유가 있습니까? 요소를 랩핑하는 데 사용할 수있는 ajaxevent 태그가 있습니다. 주어진 JavaScript 이벤트 (OnClick, OnChange)에서 활성화되고 선택한 행동을 호출합니다.

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