JSF統合でスプリングWebフロー遷移をアクティブにするJavaScriptフォームの提出
-
23-08-2019 - |
質問
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)でアクティブ化し、選択したアクションを呼び出します。