2017-03-01 19 views
0

リストにセッションを保存して、要求に応じて別のコントローラにオブジェクトを追加/削除/削除できるようにしたいと思います。私は現在、リストを作成してそれをJSONに出力するコントローラを持っています.JSONは、AngularJSを使ってjspページからアクセスしています。springMVC Webアプリケーションでオブジェクトのリストをセッションに保存する方法

リストをモデルに追加することで@SessionAttributesを使用しようとしましたが、リストが正しく保存されていません。私はSpringMVCをかなり新しくしていますので、どこを見てもらうためのアドバイスやアドバイスをいただければ幸いです。

@RestController 
@SessionAttributes({"URLparam", "usersList"}) 
public class ReportController { 

    @RequestMapping(value="/events") 
    public List<Appliance> getEvents(@ModelAttribute("URLparam")String userInput, ModelMap model){ 
    List<Appliance> events = new ArrayList<>(); 
    events = ProcessChoice.ofList(userInput); 
    model.addAttribute("usersList", events); 
    System.out.println(userInput); 
    return events; 
    } 
} 
は、私は、既存のリストを編集したい マイコントローラー

:それはコードが現状で

@Controller 
@SessionAttributes("usersList") 
public class EditListController { 

    @RequestMapping(value="/testing", method=RequestMethod.GET) 
    public String makeChanges(@RequestAttribute("usersList") List<Appliance> usersList) { 
    //make changes to list here 
    for(Appliance p: usersList) { 
     System.out.println(p.getName()); 
    } 
    return "testing"; 
    } 
} 

スロー:error 400 - Missing request attribute 'usersList' of type List

私のコントローラの私のリストを作成します

コレクションを追加するオプションがあります。<>をモデルに追加しましたが、名前を付けられないので保存する方法がわかりません。

+0

なぜセッション変数を保存しようとしていますが、データベースを使用していませんか?また、2人がそのURLを呼び出すと、セッション変数を上書きしますか? –

+0

私はまだ学習していますが、パーソナライズされたリストを処理するためにデータベースを使用する必要がありますか?それを実装する方法を学ぶためには何を調べる必要がありますか? – Chris

+0

「CRUD」と「Spring MVC」のキーワードより、まあまあ良い結果が得られるはずです。 –

答えて

1

ReportControllerでは、モデル( "events")をキー "usersList"の下に格納しています。このモデルは、ビューでレンダリングできるデータとして機能します。この方法では、セッションには格納されません。

次のようなものを考慮してください。 session.setAttribute( "usersList"、events); ReportControllerの およびEditListControllerの対応するsession.getAttribute( "usersList")。

このように@ SessionAttributesアノテーションを省略することもできます。ここhttp://vmustafayev4en.blogspot.de/2012/10/power-of-springs-modelattribute-and.htmlと公式APIドキュメント:あなたがそれらの注釈を使用したい場合は、その範囲(それらを入れて、どこにそれらを使用するためにどこ)と、ここでの使用に慣れるhttp://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/SessionAttributes.html

しかしセッションにデータを格納することに思えるかもしれません良いアイデアですが、多くのアクティブなセッションがある場合は、アプリのメモリ使用量が多い理由です。

+0

ありがとう、私はこれを知らなかった、あなたがユーザーによって作成されたカスタマイズされたリストをよりよく扱う方法を提案できますか? – Chris

+0

確かに、彼のコメントにcricket_007が示唆するようにデータベースに格納する方法もあります。しかし、これを説明することは、元の質問の範囲を超えるでしょう。もう1つの方法は、質問に答えることで概念を見つけることです:私はセッションでこれを本当に必要とするのか、それとも1つのページ(表示されるときはいつでも)でレンダリングしたいだけですか?また、このデータのソースは、そのデータをセッションで詰め込む代わりに、そのデータを再作成または取得するのにどれだけ費用がかかりますか。恐らく早すぎるかもしれません。おそらく、あなたが一日にprobsを実行していることに気をつけてください。 – bitrecycling

+1

また、サーバーが強制終了/再起動された後、またはユーザーがセッションを終了した、またはタイムアウトしたか、またはCookieが失われた後も、だからdbに格納するのが実際にあなたが望むものになるかもしれない。 そのトピックの別の質問をするか、google/Googleで検索してみてください:https://www.google.de/search?クライアント= safari&rls = en&q = sring + mvc +ここで+セッション+関連+データ&ie = UTF-8&oe = UTF-8&gfe_rd = cr&ei = BdK2WMW6O6Oo8wfI95DICw#q = spring + mvc + database + example&* 私はうれしい元の質問に答えていたと思うなら、答えを解決策にすることを検討してください。 – bitrecycling

関連する問題