JSF統合でスプリングWebフロー遷移をアクティブにするJavaScriptフォームの提出

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

質問

Spring Webflow 2、Facelets、JSFを使用してアプリケーションを開発しています。私のフローの1つには、特定のイベントでフォームの送信をトリガーする必要があるページがあります。異なるアクションごとに、別のビューを提示する必要があります。だから、私は次のJavaScriptコードをアクティブにして、提出を実行しようとしています。

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

残念なことに、これは私のフローで要求された移行を引き起こしません。ページは変更されません。誰かがこれに対処する方法を知っていますか?

ありがとう、アレクサンドル

役に立ちましたか?

解決 3

Spring Webflowフォーラムにソリューションがあります。 Jeremy Grelleによると、Spring WebflowをJSFに統合するとき、「_Eventid」パラメーターの提出は遷移をトリガーしません。彼が与えた解決策は、「_eventid」パラメーターが送信されたときにJSFアクションを作成するJSF Phaselistenerを作成することでした。

Phaselistenerコードはで見ることができます http://forum.springsource.org/showthread.php?p=219358#post219358.

他のヒント

sringfaceletssfについては何も知らないが、イベントハンドラーはおそらく戻ってくるべきだと思う 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');

Ampersandをフォームアクション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();
}

任意の(nonie)*ブラウザでテストし、それが機能するかどうかを確認します。もしそうなら、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