Struts2のバリュースタックの簡単な理解

  1. 値スタックオブジェクト
    ユーザーがアクションリクエストを送信すると、システムはすぐにアクションインスタンスと値スタックオブジェクトを作成します。Struts2の値スタックValueStackはインターフェイスであり、その実装クラスはOgnlValueStackです。2つの最も重要なプロパティは、CompoundRootルート(基本的には、値スタック操作中にスタックと見なされるArrayList)と一時的なMap <String、Object>コンテキスト(OgnlValueStackは作成されたマップの参照をコンテキストに渡します)です。

    ヒント:transientキーワードは、クラスの指定された属性のシリアル化された送信を無視できます。

    注:ルートは値スタックが初期化されるときに一緒に初期化され(ルートは値スタックのルート属性です)、コンテキストはルートが初期化されるときに一緒に初期化されます。

    値スタックとActionContextの関係(相互を含む):ActionContextは、
    値スタック内のvalueStackオブジェクトを取得できます。値スタックと値スタックのコンテキスト属性の関係:contextは、のコンテキスト属性間の関係を取得します。コンテキスト
    値スタックとするactionContext値スタック経由:コンテキストストアするactionContextへの参照

  2. 値スタックの取得値スタックの
    ライフサイクルはリクエストと同じです。Request.setAttribute ( "key"、 "valueStack")を使用して値スタックをリクエストフィールドに格納し、ライフサイクルを延長して、キーを使用できます。定数の形式での属性の属性は、ServletActionContextドメインオブジェクト(ActionContextから継承)に格納されます。この操作の後、値スタックオブジェクトを取得する前、要求オブジェクトを取得する必要があります次に、値スタックオブジェクトを取得します。そのキーを取得することによって
    ここに画像の説明を挿入します

    ヒント:値スタックの本質は、Requestドメインオブジェクトの属性値であり、属性の名前はstruts.valueStackであり、属性はServletActionContextのSTRUTS_VALUESTACK_KEY定数に格納されます

    値スタックのコンテキストプロパティを取得します(ドメインオブジェクトはすべてオブジェクト参照です):ActionContext.getContext()
    ここに画像の説明を挿入しますここに画像の説明を挿入します
    は、値スタックにアクセスするための便利な方法です。Struts2は、値スタックオブジェクトをcontextという名前のマップに配置し、setRoot()を初期化します。 OgnlValueStackのルートを介して。チェックしてください。
    ここに画像の説明を挿入します
    値スタックへの便利なアクセス:ValueStack valueStack = ActionContext.getContext()。getValueStack();


  3. 値スタックのスタック操作マクロ値スタックには、ルートオブジェクトのルートコンテキストと非ルートオブジェクトコンテキストが含まれます。値スタックの操作には、2つの側面があります。1つはデータを値スタックに配置すること、もう1つはデータを値スタックに配置することです。値スタックからデータを読み取ります。
    <s:debug />:値スタックとコンテキスト内のデータを表示します。明示的にデータを
    ここに画像の説明を挿入します
    ルートに配置します(最初に値スタックオブジェクトを取得してから、データを配置します)①StudentstuA= new Student( "Li Ronghao"、35 );     valueStack.push(stuA); ②StudentstuB= new Student( "李荣浩"、35);     valueStack.getRoot()。push(stuB); ③StudentstuC= new Student( "李荣浩"、35);     Map < String、Student> map = new HashMap <String、Student>();     map.put( "stuC"、stuC);     valueStack.push(map); ④StudentstuD= new Student( "     李荣浩"、35); valueStack。 set( "stuD"、stuD); ⑤StudentstuE = new Student( "     李荣浩"、35); valueStack.getRoot()。add(stuE);











    暗黙的にデータをルートに配置します(値スタック操作コードはありませんが、データは配置されます):アクションの属性を操作します

    向コンテキスト中データ式放入数データ①ActionContext.getContext
    ()。put( "some"、 "some_value");
    ②ActionContext.getContext()。getSession()。put( "ses"、 "ses_value");
    ③ActionContext.getContext()。getApplication()。put( "app"、 "app_value");

    暗黙的にデータをコンテキストに入れる:アクションリクエストの送信時に運ばれるパラメータは、コンテキストのパラメータ属性に自動的に保存されます
    注:
    ①コンテキストマップには、アプリケーション、セッション、値、スタック(ルート)、アクション、リクエスト、パラメータが含まれます。 、attr②
    #request.nameの最下層はrequest.getAttribute( "name")であり、#parameters.nameの最下層はrequest.getParameter( "name")です。

    ルートにデータをロードする順序:アクションを使用して特定のデータをコンテキストに配置した後、ページでどのようにアクセスしたかに関係なく(#Accessコンテキストを使用、それ以外の場合はルートにアクセス)、入力した値を取得できます

    リクエストでデータをロードする順序:Struts2パッケージ化後の#request.name、ロードの順序はリクエストドメインスペース→ルート→コンテキストです

おすすめ

転載: blog.csdn.net/qq_44965393/article/details/111933079