13

私はSpring MVCを初めて使用し、学んだことを実行してサンプルアプリケーションを作成し始めました. 春のMVCでセッション管理を実装する予定です。これは役に立ちました。

しかし、私はそれを明確に理解することはできません。次のようにセッションに値を追加します

HttpSession session = request.getSession(false);
session.setAttribute("key", value);
session.setAttribute("key1",  value1);

そして後で、次のようなキーに基づいて値を取得します

session.getAttrubute("key");

しかし、春のMVCでは、似たようなものは見られず、完全に混乱しました。

@Controller
@SessionAttributes("thought")
public class SingleFieldController {

    @RequestMapping(value="/single-field")
    public ModelAndView singleFieldPage() {
        return new ModelAndView("single-field-page");
    }

    @RequestMapping(value="/remember")  
    public ModelAndView rememberThought(@RequestParam String thoughtParam) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("thought", thoughtParam);
        modelAndView.setViewName("single-field-page");
        return modelAndView;
    }

}

上記のコード では、これが定義され@SessionAttributes("thought")ているもののように私を完全に混乱させています。thoughtModelAndViewbackbone.marionette.js

では、セッションで値を設定し、必要なときにいつでも使用するにはどうすればよいでしょうか? また、値を画面に返すときに、セッションで使用できる UserDefined オブジェクトのリストのみを返すため、セッション オブジェクトをユーザー定義オブジェクトに変換する必要があります。

ですから、それをよりよく理解するのを手伝ってください。jsp/サーブレットの使い方に混​​乱しているのかもしれません。

アップデート

以下は私が持っていてコメントを提供したコントローラーです

package com.hexgen.puppet;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.hexgen.puppet.CreatePuppet;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@Controller
public class PuppetService {

    @RequestMapping(method = RequestMethod.POST, value = "/create")
    public @ResponseBody
    void createOrder(@RequestBody CreatePuppet request) {
        //logic to add/update values in session
    }

    @RequestMapping(method = RequestMethod.GET, value = "/list")
    public @ResponseBody
    List<Puppet> getGroups() {
        //logic to retrive objects from session and convert it as List and send it back

        return puppets;
    }


}

必要に応じてオブジェクトを変換して続行します

4

2 に答える 2

14

@SessionAttributesは、従来のHttpServletセッション管理を完全に置き換えるものではありません。2 つ以上の Controller メソッドが何らかのデータを通信する必要がある場合に使用します。ただし、これを使用すると、単一のコントローラークラス内でのみ通信を実現できます。@SessionAttributesを使用している場合は、明示的にセッションを読み書きするために使用しません。@SessionAttributesの使用は、短期間の通信にのみ推奨されます。セッションに長期データを保存する必要がある場合は、 @SessionAttributesの代わりにsession.setAttributesession.getAttributeを明示的に使用することをお勧めします。詳細については、こちらをご覧ください

于 2013-06-17T11:33:16.053 に答える