0

spring MVC を使用して、オブジェクトをセッションに保存する必要があり、jstl を使用して複数の jsp ページで同じオブジェクトを使用する必要があります。私はこのように試しました:

ModelAndView modelAndView = new ModelAndView("admin/addproduct", "category", categorynameList);

しかし、ページ以外の他のjspページへのカテゴリにアクセスできませんaddproduct

どうやってやるの?

4

4 に答える 4

2

Spring MVC は、単純な使用をユーザーから隠す複数のメカニズムを提供HttpSessionします。

アノテーションを見て@SessionAttributesください。これにより、コントローラーによってセッションに保存される属性を定義できます。このメカニズムは主にハンドラーの会話状態を維持することを目的としており、通常、会話が完了するとその状態はクリアされます。

また、Bean をアプリケーション コンテキスト内のセッション スコープとして定義し、ScopedProxyFactoryBean を使用して ( <aop:scoped-proxy/>Bean 定義に要素を追加するだけで)、その Bean をシングルトン コントローラーに注入できます。

于 2012-09-17T10:54:34.943 に答える
1

注釈付きのコントローラー メソッドにセッションを直接渡すことができます。

@RequestMapping("somePathName")
public String someHandler(HttpSession session) {
  session.setAttribute(...
于 2012-09-17T10:48:37.877 に答える
-2

コントローラー クラスにセッションを挿入し、そこにオブジェクトを保存して、必要なときに使用します。

@Controller
public class SomeController {

  //@Autowired
  //private HttpSession session; This is not desired. See the discussion in the 
  //comments.

  @RequestMapping("somePathName")
  public String someHandler(HttpSession session) { //Session will be injected by 
    //Spring without any additional annotations.
    //...
    session.setAttribute("category", yourObject);
  }
}

category他のページにアクセスする必要がある場合admin/addproductは、次のようにそれぞれのモデルに追加する必要があります。

@RequestMapping("somePathName")
public String someHandler(Model model) {
  //...
  model.addAttribute("category", yourObject);
  //...
  return "yourPageName";
}

更新: ALex のコメントによると、HttpSessionインスタンスをフィールドに注入することはstrongly、スレッドの安全性の問題により望ましくないということで、ソースをそれぞれ変更しました。

于 2012-09-17T10:39:57.577 に答える