1

私は Struts に取り組んでいて、奇妙な動作に遭遇しました。エラーやバグは発生していませんが、皆さんと共有するのは興味深いと思いました.

おそらく、あなたの1人がなぜこれが起こっているのかを説明できます.

次のコードで Struts アクションを作成します -

public class MyAction extends ActionSupport {
    private Map<String, Map<String, Object>> map = new HashMap<String, Map<String, Object>>();
    public String execute() {
        System.out.println(map);
        return SUCCESS;
    }

    public Map<String, Map<String, Object>> getMap() {
        return map;
    }

    public void setMap(Map<String, Map<String, Object>> map) {
        this.map = map;
    }
}

関連するマッピングと必要な Jsp を作成し、アクションを実行します。コンソールに次の出力が表示されます -

{systemProperties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=C:\Program Files\Java\jdk1.6.0_32\jre\bin, java.vm.version=20.7-b02, shared.loader=${catalina.base}/shared/classes ....

どうやら Struts がシステム プロパティをマップに注入しているようです。しかし、なぜそうしているのでしょうか?私はそうするように頼んだわけではありません。私が使用した特別な XML 構成や注釈はありません。Struts のどの部分 (どのインターセプター) がこれを担当していますか? バグを発見したのですか、それともこれは正常な動作ですか? Map<String, Map<String, Object>>Struts の開発者がシステム プロパティをすべてに注入するのが賢明だと考えたのはなぜですか?

4

1 に答える 1

0

私はこれを自分で試してみましたが、私の推測は正しかったです。ここに掲載したコードは、そのような結果を生成しません。コードを見れば、これを自分で簡単に見つけることができます。マップには何も入力されていません。ゲッターとセッターのみです。

"So apparently Struts is injecting the system properties into my map"

フォームなどでこのアクションにパラメーターを渡すと、Struts はアクション内で対応する setter-method を探します。これは、コード、フォーム、またはパラメーターのどこかに、"map"このアクションに渡された何かがあることを示しています。

を調べて、struts.xmlそこにいくつかのパラメーターを設定しているかどうかを確認します。そうでない場合は、アクションを呼び出している場所と送信するパラメーターをよく見てください。次に、マップで通過している場所を見つけることができるはずです。

于 2012-06-26T09:10:06.877 に答える