私たちが知っているように、Strut2のアクションクラスは、リクエストパラメーター、アクション構成パラメーター、他のアクション(チェーン結果を介して)に属性値を渡すなどの属性を介してすべての関連する値を取得できます。これらのパラメーター値を取得するために、アクションクラスのパラメーターと同じ名前のプロパティを宣言することですStruts2がアクションクラスのアクションメソッドを呼び出す前に(デフォルトは実行メソッドです)、対応するアクションプロパティが割り当てられます。
この関数を完了するために、Struts2はValueStackオブジェクトに大きく依存します。このオブジェクトは、アクションのライフサイクル全体を実行します(アクションクラスの各オブジェクトインスタンスには、Valuestackオブジェクトがあります)。 struts2が.crationリクエストを受信すると、最初にアクションクラスオブジェクトのインスタンスを作成しますが、アクションメソッドを呼び出しませんが、最初にValuestackオブジェクトのトップレベルノードにアクションクラスの対応するプロパティを配置します(ValueStackオブジェクトはスタックと同等です)。文字列タイプの属性値はnull、intタイプの属性値は0などです。
上記の作業を処理した後、Struts2はインターセプターチェーンのインターセプターを呼び出します。すべてのインターセプターを呼び出した後、アクションクラスのアクションメソッドが呼び出されます。アクションメソッドを呼び出す前に、Valuestackオブジェクトのトップレベルノードの属性値は、アクションクラスの対応する属性に割り当てられます。誰もが注意を払うべきです、これは私たちに多くの柔軟性をもたらします。つまり、インターセプターを呼び出すStruts2のプロセス中に、ValueStackオブジェクトの属性の値を変更できます。特定の属性値が変更されると、アクションクラスの対応する属性値は、インターセプターの属性の最後の変更の値になります。
上記の説明から、struts2のアクションクラスでは、異なるインターセプターによって処理される属性と同じ名前のパラメーター値を取得できることを簡単に知ることができます。たとえば、リクエストパラメーターを取得するインターセプターはパラメージであり、アクションの構成パラメーターを取得するインターセプターはstaticparamsなどです。これらのインターセプター内の対応する値を読み取り、ValueStackオブジェクトのトップレベルノードの対応するプロパティの値を更新します。 ValueStackオブジェクトはコンベアベルトのようなもので、あるインターセプターから別のインターセプターに属性値を渡します(もちろん、この期間中、属性値が変更される可能性があります)。最後にアクションオブジェクトに渡し、ValueStackオブジェクトの属性の最終値はアクションクラスの対応する属性に割り当てられます。
ディスプレイレイヤーでEL式を使用すると、EL式の11の非表示オブジェクトのプロパティにアクセスするだけでなく、ValueStackのオブジェクトプロパティ値にもアクセスできます。
パブリッククラスStrutsRequestWrapperはhttpservletrequestwrapper {public strutsrequestwrapper(httpserservletrequest req){super(req);} public object getattribute(string s){...... actioncontext ctx = actioncontext.getTribute();要求範囲(ctx!= null){if(attribute == null){//属性値が要求範囲から見つからない場合、つまり、オブジェクトの属性値はvaluestack stack = ctx.getvaluestack() return属性;}}要約します
上記は、STRUT2が要求パラメーターをどのようにカプセル化するかについてのこの記事についてのすべてです。すべての人に役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!