spring学習の@Session Attributes実例解析


本研究の主な内容はspring学習の@Session Attributesです。具体的には以下の通りです。
一、@ModelAttribute
デフォルトでは、ModelMapの属性作用領域はrequestレベルであり、つまり、今回の要求が終了すると、ModelMapのプロパティは破棄されます。複数の要求の中でModelMapの属性を共有したいなら、その属性をsessionに保存しなければならない。このようにModelMapの属性は、またぎの要求によってアクセスできる。
springは、次の要求が対応するModelMapの属性リストにアクセスできるように、ModelMapのどの属性を選択的に指定するかをsessionに保存する必要があります。この機能は、クラス定義に@SessionAttributes の注釈を付すことによって達成される。
モデルオブジェクトの特定の属性をSession範囲の作用領域とする。

package com.baobaotao.web;
…  
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.SessionAttributes;
@Controller  
@RequestMapping("/bbtForum.do")  
@SessionAttributes("currUser")  
//① ModelMap     currUser    ,  Session     ,               
public class BbtForumController {
	…  
	  @RequestMapping(params = "method=listBoardTopic")  
	  public String listBoardTopic(@RequestParam("id")int topicId, User user,  
	ModelMap model) {
		bbtForumService.getBoardTopics(topicId);
		System.out.println("topicId:" + topicId);
		System.out.println("user:" + user);
		model.addAttribute("currUser",user);
		//② ModelMap         
		return "listTopic";
	}
}
私たちは②にModelMap属性を追加しました。その属性はcurrUserといい、①において@SessionAttributes の注釈でModelMapの中のcurrUserという属性をSessionに置くので、listBoardTopic()要求に対応するJSPビューページで request.getAttribute(“currUser”) session.getAttribute(“currUser”) を介してオブジェクトuserを取得することができます。この属性は、次の要求に対応するJSPビューページにおいてsession.getAttribute(“currUser”) またはModelMap#get(“currUser”) を介してアクセスされてもよい。
ここでは一つのModelMapの属性だけをSessionに入れます。実は@SessionAttributes に複数の属性を指定することができます。文字列配列で@SessionAttributes({“attr1”,”attr2”}) などの複数の属性を指定できます。また、,@SessionAttributesは、@SessionAttributes(types = User.class) などの属性タイプによって、session化されるModelMap属性を指定することもできます。もちろん、@SessionAttributes(types = {User.class,Dept.class}) などの複数のクラスを指定することもできます。属性名と属性タイプ指定を併用することもできます。
二、@ModelAttribute
Session属性にアクセスする必要があるcontrollerに@SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”}) を加えて、actionに必要なUserパラメータに@SessionAttributesを加えて、両者の属性名が一致することを保証することができる。SpringMVCは、自動的に@ModelAttributeで定義された属性をModelMapオブジェクトに注入し、setup actionのパラメータリストでModelMapにこのようなオブジェクトを取ってパラメータリストに追加します。Session Stortsの@SessionAttributes 方法を呼び出さない限り、このオブジェクトは常にSessionに保持され、Session情報の共有を実現します。

@Controller  
@SessionAttributes("currentUser")</span>  
public class GreetingController{
	@RequestMapping  
	public void hello(@ModelAttribute("currentUser")User user){
		//user.sayHello()
	}
}
締め括りをつける
以上がspring学習の@Session Attributesの実例解析のすべての内容であり、皆さんの役に立つことを願っています。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。