4

Struts 1.3を使用して、3つのjspページと3つのStrutsアクションで構成されるウィザードのようなインターフェイスを作成しています。フローは次のようになります:page1> action1-> page2> action2-> page3> action3

セッションフォームBean(セッションスコープを持つアクションフォーム)を使用して、リクエスト間でデータを共有します。私が抱えている問題は、ページ2で送信したデータがアクション2で利用できるが、アクション3では利用できないことです。これらのデータを保持するためのフォームがページ3にないか、電話をかけているためか、通常のフォーム送信の代わりにjQuerypostメソッドを介したaction3ですが、よくわかりません。

私はほぼ1日の間すべてのインターネットを掘り続けてきましたが、それでも運がありません。誰かが助けを提供できますか?どうもありがとう。

4

4 に答える 4

5

StrutsConfig.xml の両方のアクションに同じフォームを割り当てた可能性があるため、ClassCastException が発生していないと思います。ちなみに、アクション 2 で埋められたものと同じフォーム Bean にアクセスする場合は、次のようにします。

  1. 両方のアクション (2 と 3) のactionMappingについてstrutsConfigファイルを調べます。アクションごとに異なるフォームの名前を使用します (例: action2 には form2、action3 には form3)。
  2. Action3 では、フォームをキャストする代わりに、これを使用しますform2 = (FormBean2) session.getAttribute("form2");

上記の理由は、両方のアクションが同じフォームを使用しているため、ストラットがそれを上書きしている可能性があるためです。上記で問題が解決することを願っています。

于 2010-12-07T10:42:52.370 に答える
4

フォームのreset()メソッドはリクエストごとに呼び出されるため、状態が失われます。これはプログラムで制御できます。

public class MyForm extends ActionForm {
    boolean reset = true;
    private String[] checkboxes = {};

    @Override
    public void reset(ActionMapping mapping, HttpServletRequest request) {
        if (reset) {
            this.checkboxes = new String[];
            // etc
        }

        reset = true;
    }

    public void doNotReset() {
        reset = false;
    }
}

action2にフォームでdoNotReset()を呼び出させます。

于 2010-12-21T20:27:51.187 に答える
1

ご入力いただきありがとうございます。これが私の問題を解決した方法です。私はこの解決策が本当に好きではありませんが、おそらく私が見つけることができる最も近い解決策です。

3ページで、アクション3で使用できるようにしたいプロパティの非表示フィールドを追加しました。Strutsはそれらの非表示フィールドに値を格納し、フォームが再度送信されると、データがアクションフォームに再入力されます。

Strutsは次のように機能しているように見えます。ページ3をロードすると、ページ3のフォームにmyFormの値を入力しようとします。フォームが送信されると、プロセスが逆になり、myFormにユーザーのフォームの値が入力されます。問題は、myFormにユーザーが送信した値を入力する前に、myFormのプロパティがリセットされることです。また、リセット後、これらのフィールドの値が見つからないため、空のままになります。

Strutsがそのように機能することは意味がないと思いますが、...そうです。

于 2010-12-07T13:13:22.293 に答える
0

action2 と action3 で page2 のフォーム Bean にどのようにアクセスしていますか。
アクセス方法が間違っていると思います。invalidCast などに関する例外が発生していますか。

于 2010-12-07T06:21:22.717 に答える