1

これは、アクションチェーンを使用している私のStruts 2フローです

JSP--->Action1--->Action2--->ResultJsp

アクション チェーンでは、リクエストがアクション 1 からアクション 2 に転送されることを理解しています。そのため、アクション 1 からアクション 2 にパラメータを渡す場合、新しいアクション インスタンス変数 (新しいアクション用に作成された値スタック) に設定する必要があります。

以下はaction1の私のコードです

@Result(name = "displayEmployee",type = "chain",
        params = {
            "namespace", "/employee",
            "actionName", "Employee-lookup!search",
            "empMode", "true"

        })


@Action("display-employee!displayEmployee")
  public String displayEmployee() {
    return "displayEmployee";
  }

アクション 2、つまり display-employee では、empMode という名前のブール型プロパティがあります。しかし、結果の注釈で属性として渡しているため、値をtrueにする必要がありますが、値をfalseとして取得します。アクション チェーンに関する私の理解では、すべてのリクエスト パラメータはアクション 1 からアクション 2 に転送されます。基本的に、action1 に存在していた変数を含む action2 の新しい値スタックが作成されます。では、アクション 2 で empMode プロパティに値 true が設定されていないのはなぜでしょうか?

4

2 に答える 2

2

私はあなたがこれを行うことができるとは思わない.チェーン結果タイプを使用して追加のパラメータを渡すことができるという言及はありません: http://struts.apache.org/release/2.3.x/docs/action-chaining.html

結果はチェーン型です...そのため、パラメーターを解釈して処理する必要があります。その後、新しいアクションが開始されるためです。しかし、チェーンにはこの機能がありません (ソースを見てください): http://grepcode.com/file/repo1.maven.org/maven2/org.apache.struts.xwork/xwork-core/2.3.1.1/com/ opensymphony/xwork2/ActionChainResult.java を開きます

これが通常のリダイレクトである場合は、これらのパラメーターをリクエストに追加できます。

つまり、必要なプロパティをアクションに追加すると、チェーンは必要なことを行います。これは、チェーンの結果には「名前空間」と「アクション」以外のプロパティを処理する機能がないためです。

于 2013-03-01T18:57:16.703 に答える
0

アクション チェーンを使用する以外に選択肢がなく、一方から他方にパラメータを渡す必要がある場合は、次のいずれかの方法を試してください。

  1. 両方のアクションに対応する getter/setter メソッドがあります。例: Action1 から Action2 に 'empMode' パラメータを渡したい場合。両方のアクションに getEmpMode()/setEmpMode() メソッドがあります。

  2. アクション コンテキストのパラメーター マップに渡したいパラメーターを追加します。ActionContext.getContext().getParameters() を使用してパラメーター マップにアクセスできます。Action2 に渡す新しいパラメーターを、Action1 からこのマップに追加します。Action2 に新しいパラメーターに対応する getter/setter があり、「params」インターセプターがスタックで構成されている場合、Action2 は正しく取り込まれます。

于 2013-03-02T08:16:11.197 に答える