Spring MVCプロジェクトでSessionAttributesを使用する

はじめに




この記事では、 大幅に簡素化された映画チケット予約プロセスの実装について説明します。 ユーザーが複数のページで予約に必要なデータを入力すると仮定します。機能は論理的に分割されます。 最初のページで、彼はセッションに関連するデータを入力し、2番目に彼の個人データ、3番目に-支払いデータ。 最後のページでは、予約を確認します。 ユーザーが入力したものはすべてセッションの形式で保存され、予約の終了時にセッションからのデータが削除されます。







どこから始めるか




すぐに予約します。SpringMVCは既にプロジェクトで使用されていると想定され、jspはビューの形式で使用されます。



ユーザーは次の順序でナビゲートします。







リスト:booking.jsp



 <%@ page contentType = "text / html; charset = UTF-8" language = "java"%>
 <%@ taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
 <html>
 <head>
     <title>予約開始ページ</ title>
 </ head>
 <本体>
     <form:form action = "/ booking / movie" modelAttribute = "ticketForm">
        ムービーID:<フォーム:入力パス= "movieId" />
         <入力タイプ= "送信" />
     </フォーム:フォーム>
 </ body>
 </ html>




リスト:customer.jsp



 <%@ page contentType = "text / html; charset = UTF-8" language = "java"%>
 <%@ taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
 <html>
 <head>
     <title>顧客ページ</ title>
 </ head>
 <本体>
     <フォーム:フォームアクション= "/予約/顧客" modelAttribute = "ticketForm">
        姓:<フォーム:入力パス= "lastName" />
         <入力タイプ= "送信" />
     </フォーム:フォーム>
 </ body>
 </ html>




リスト:payment.jsp



 <%@ page contentType = "text / html; charset = UTF-8" language = "java"%>
 <%@ taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
 <html>
 <head>
     <title>支払いページ</ title>
 </ head>
 <本体>
     <フォーム:フォームアクション= "/予約/支払い" modelAttribute = "ticketForm">
        クレジットカード番号:<フォーム:入力パス= "creditCardNumber" />
         <入力タイプ= "送信" />
     </フォーム:フォーム>
 </ body>
 </ html>




リスト:confirm.jsp



 <%@ page contentType = "text / html; charset = UTF-8" language = "java"%>
 <html>
 <head>
     <title>確認ページ</ title>
 </ head>
 <本体>
    ご購入ありがとうございます!
 </ body>
 </ html>




形態:



パブリッククラスTicketForm {

     private String movieId;
     private String lastName;
     private String creditCardNumber;

     public String getMovieId(){
         return movieId;
     }

     public void setMovieId(String movieId){
         this.movi​​eId = movieId;
     }

     public String getLastName(){
         return lastName;
     }

     public void setLastName(String lastName){
         this.lastName = lastName;
     }

     public String getCreditCardNumber(){
         return CreditCardNumber;
     }

     public void setCreditCardNumber(String creditCardNumber){
         this.creditCardNumber = creditCardNumber;
     }

 }




BookTicketControllerコントローラーで@SessionAttributesアノテーションを使用する例では、モデルにアタッチされたTicketFormタイプもセッションに保存されます。 @SessionAttributesは、モデル内の属性名とともに使用することもできます。



 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.util.Assert;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.SessionAttributes;
 import org.springframework.web.bind.support.SessionStatus;

 @Controller
 @RequestMapping(値= "/ booking")
 @SessionAttributes(タイプ= TicketForm.class)
パブリッククラスBookTicketController {

     @RequestMapping(メソッド= RequestMethod.GET)
     public String start(モデルモデル){
         // start()を終了した後、@ SessionAttributes(types = TicketForm.class)のおかげでフォームがhttpセッション属性にコピーされます
         model.addAttribute(新しいTicketForm()); 
         「予約/予約」を返す;
     }

     @RequestMapping(値= "/ movie"、メソッド= RequestMethod.POST)
     public String selectMovie(TicketForm ticketForm){

         Assert.notNull(ticketForm);
         Assert.notNull(ticketForm.getMovieId());

         「予約/顧客」を返す;
     }

     @RequestMapping(値= "/ customer"、メソッド= RequestMethod.POST)
     public String enterCustomerData(TicketForm ticketForm){

         Assert.notNull(ticketForm);
         // movieIdはcustomer.jspで送信されませんでしたが、selectMovie()中にセッションで保存されました
         Assert.notNull(ticketForm.getMovieId());
         Assert.notNull(ticketForm.getLastName());

         「予約/支払い」を返す;
     }

     @RequestMapping(値= "/ payment"、メソッド= RequestMethod.POST)
     public String enterPaymentDetails(TicketForm ticketForm){

         // movieIdはcustomer.jspで送信されませんでしたが、selectMovie()中にセッションで保存されました
         Assert.notNull(ticketForm.getMovieId());
         // lastNameはpayment.jspで渡されませんでしたが、enterCustomerData()中にセッションで保存されました
         Assert.notNull(ticketForm.getLastName());
         Assert.notNull(ticketForm.getCreditCardNumber());

         return "redirect:/ booking / confirm";
     }

     @RequestMapping(値= "/確認"、メソッド= RequestMethod.GET)
    パブリックストリング確認(SessionStatusステータス){
         status.setComplete();  //個人データのセキュリティのためにSpringセッションをクリアします
         「予約/確認」を返します。
     }

 }




さらに




SessionStatusパラメーターをコントローラーメソッドに渡すことで、SessionAttributesを制御できます。



 @RequestMapping(値= "/確認"、メソッド= RequestMethod.GET)
    パブリックストリング確認(SessionStatusステータス){
         status.setComplete();
         「予約/確認」を返します。
     }




status.setComplete()を呼び出すことにより; Springセッションを終了すると、HTTPセッションを維持しながらSessionAttributesが削除されます。



All Articles