0

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

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

残念ながら、これは私のフローで要求された遷移をトリガーしません。ページは変わりません。誰もこれに対処する方法を知っていますか?

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

4

6 に答える 6

1

よく調べてみると、このコードには多くの問題があります。

document.myForm.action は、要素を取得する非標準の方法です。より良いクロスブラウザーの方法は次のとおりです。

document.getElementById('myFormId');

フォーム アクション URL にアンパサンドを盲目的に追加すると、別の url パラメーターが既にあると想定されるため、URL の後に疑問符が既に存在します。そうでない場合は、次の行が改行されます。

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

最後に、この関数を onsubmit ハンドラーとして呼び出す場合myForm.submit()は、メソッドを呼び出さずに true を返すだけでよいと思います

于 2008-12-19T16:43:11.920 に答える
1

Spring WebFlow フォーラムで解決策を見つけました。Jeremy Grelle によると、Spring WebFlow を JSF に統合する場合、「_eventId」パラメーターの送信は遷移をトリガーしません。彼が提供した解決策は、「_eventId」パラメーターが送信されたときに JSF アクションを作成する JSF PhaseListener を作成することでした。

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

于 2009-01-05T17:08:15.590 に答える
1

SringFaceletsSF については何も知りませんが、おそらくイベント ハンドラーは を返すはずだと思いますtrue。そうしないと、ブラウザーはフォームを送信しません。

それで:

function myFormSubmit( eventId ) {
   var formAction = document.myForm.action;
   document.myForm.action = formAction + '&_eventId=' + eventId;
   document.myForm.submit();
   return true;
}
于 2008-12-19T16:26:47.817 に答える
0

SWF に付属する Spring Faces コンポーネントを使用できない理由はありますか? 要素をラップするために使用できる ajaxEvent タグがあります。指定された JavaScript イベント (onclick、onchange) でアクティブになり、選択したアクションを呼び出します。

于 2009-12-17T22:58:37.563 に答える
0

form.action の変更は、フォーム送信に情報を追加する方法としては非常に貧弱です。eventID を入力できる非表示の入力をフォームに入れることをお勧めします。

于 2008-12-19T18:00:15.553 に答える
0

GET パラメータまたは POST パラメータでこのパラメータを探していますか? POST には表示されません。

アップデート:

わかりましたので、説明のために、これを試してください...

これを行うには、関数を変更します。

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();
}

(IE 以外の)* ブラウザーでテストし、動作するかどうかを確認します。もしそうなら、GET vs. POST パラメータが問題です。

* non-IE: trying to set the name or type in IE will FAIL, thus don't test there.
于 2008-12-19T16:22:31.383 に答える