Top > SAStrutsあれこれ > 2-6 お買い物情報をデータベースに保存しよう

  • Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
    
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    
    CREATE TABLE `sastruts`.`shopping` (
      `id` VARCHAR(32) NOT NULL,
      `userid` VARCHAR(45) NOT NULL,
      `shoppingdate` DATE NOT NULL,
      PRIMARY KEY (`id`)
    )
    ENGINE = InnoDB;
     
    CREATE TABLE `sastruts`.`shoppingdetail` (
      `shoppingid` VARCHAR(32) NOT NULL,
      `no` INTEGER UNSIGNED NOT NULL DEFAULT 0,
      `productid` INTEGER UNSIGNED NOT NULL,
      `counts` INTEGER UNSIGNED NOT NULL,
      PRIMARY KEY (`shoppingid`,`no`)
    )
    ENGINE = InnoDB;
     
    ALTER TABLE `sastruts`.`shoppingdetail` ADD CONSTRAINT `FK_shoppingdetail_shopping` FOREIGN KEY `FK_shoppingdetail_shopping` (`shoppingid`)
        REFERENCES `shopping` (`id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT;
     
    ALTER TABLE `sastruts`.`shoppingdetail` ADD CONSTRAINT `FK_shoppingdetail_catalog` FOREIGN KEY `FK_shoppingdetail_catalog` (`productid`)
        REFERENCES `catalog` (`id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT;

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 
 
 
 
 
 
 
 
 
 
 
 
 
-------------
  <target name="gen-entity">
    <gen-entity
      rootpackagename="${rootpackagename}"
      entitypackagename="${entitypackagename}"
      javafiledestdir="${javafiledestdir}"
      javafileencoding="${javafileencoding}"
      env="${env}"
      jdbcmanagername="${jdbcmanagername}"
      classpathref="classpath"
      tableNamePattern="shopping|shoppingdetail"
    />
-------------
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
 
 
 
 
 
    /** idプロパティ */
    @Id
    /*@GeneratedValue*/
    @Column(length = 32, nullable = false, unique = true)
    public String id;

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<html>
<head>
<title>ショッピングカートの内容</title>
<%-- 1) 個数が値エラー(負数)の場合のテキストボックスの色を定義 --%>
<style type="text/css">
  input.err { background-color: yellow; }
</style>
</head>
<body>
購入予定のリストです。ご確認下さい。
<html:errors/>
<s:form>
  <c:forEach var="c" items="${catalogList.catalogDtos}">
  <table border="1">
    <thead>
      <tr>
        <th>商品番号</th>
        <th>商品名</th>
        <th>価格</th>
        <th>数量</th>
        <th>小計</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>${f:h(c.id)}</td>
        <td>${f:h(c.name)}&nbsp;${f:h(c.detail)}</td>
        <td align="right"><fmt:formatNumber value="${c.price}" pattern="#,##0"/></td>
        <%-- 2) セッションに保存してあるカートの各商品の個数だけを書き換えるようにします --%>
        <td><html:text name="catalogList.catalogDtos" property="count" value="${f:h(c.count)}" errorStyleClass="err" indexed="true"/></td>
        <td><fmt:formatNumber value="${c.price * c.count}" pattern="#,##0"/></td>
      </tr>
    </tbody>
  </table>
  <br>
  </c:forEach>
  <table border="1">
    <thead>
    </thead>
    <tbody>
      <tr>
        <td>合計</td>
        <%-- 3) CatalogListDto#getTotalPriceメソッドで総合計金額を取得して表示 --%>
        <td><fmt:formatNumber value="${catalogList.totalPrice}" pattern="#,##0"/></td>
      </tr>
    </tbody>
  </table>
  <%-- 4) 複数商品の個数変更を一括して適用します --%>
  <html:submit property="change" value="数量変更"/>
</s:form>
<br>
<s:form>
  数量変更は有効になりません。数量を変更してから購入ボタンを押してください。<br>
  ユーザ名<html:text property="userid"/>
  <html:submit property="commit" value="購入する"/>
</s:form>
<br>
<s:link href="/catalog/list">商品一覧へ戻る</s:link>
</body>
</html>
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 
-
|
|
|
|
|
|
!
@Component(instance = InstanceType.SESSION)
public class CatalogOrderForm implements Serializable {
--------------
    //ユーザID
    //「購入する」ボタンクリック時に使用されます。
    @Required(target="commit")
    public String userid;
--------------
}

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
!
|
------------------------------------------------------    
public class CatalogOrderAction {
    
    //2-6で追加
    //購入完了画面表示用プロパティ
    public String userid;
    
    //2-6で追加
    //購入、購入詳細テーブルの挿入ロジックサービス
    @Resource
    protected CatalogOrderService catalogOrderService;
------------------------------------------------------    
    //2-6で追加
    //1)「購入する」ボタンクリック時のアクション
    //本メソッド正常終了時にセッションに格納されていたカートは削除されます。
    @Execute(input="cart.jsp", removeActionForm=true)
    public String commit() {
        
        //購入テーブルと購入詳細テーブルへのデータ追加処理
        catalogOrderService.insert(catalogOrderForm.userid, catalogOrderForm.catalogList);
        
        //セッションを破棄する前に、表示用ユーザIDをリクエストスコープにコピーします。
        userid = new String(catalogOrderForm.userid);
        return "commit.jsp";
    }
------------------------------------------------------   

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
!
!
|
|
-
|
|
!
|
|
-
|
!
!
package sample.service;
 
import java.util.Calendar;
import java.util.Date;
 
import javax.annotation.Resource;
import sample.dto.CatalogDto;
import sample.dto.CatalogListDto;
import sample.entity.Shopping;
import sample.entity.Shoppingdetail;
 
public class CatalogOrderService {
 
    //shoppingテーブルのサービスクラスをDIします。
    @Resource
    protected ShoppingService shoppingService;
 
    //ShoppingdetailテーブルのサービスクラスをDIします。
    @Resource
    protected ShoppingdetailService shoppingdetailService;
    
    //購入テーブルと購入詳細テーブルへの追加を行います。
    public void insert(String userid, CatalogListDto cart) {
 
        //購入IDを生成します。
        String id = getId();
 
        //購入テーブルへ挿入します。
        Shopping shopping = new Shopping();
        shopping.id = id;
        shopping.userid = userid;
        shopping.shoppingdate = nowDate();
        shoppingService.insert(shopping);
 
        long no=1;
        for( CatalogDto d : cart.catalogDtos ) {
            //購入詳細テーブルへ挿入します。
            Shoppingdetail detail = new Shoppingdetail();
            detail.shoppingid = id;
            detail.no = no;
            detail.productid = Long.parseLong(d.id);
            detail.counts = Long.parseLong(d.count);
            shoppingdetailService.insert(detail);
            no++;
        }
    }
 
    //現在日を取得
    private Date nowDate() {
        Calendar cal = Calendar.getInstance();
        return new Date(cal.getTimeInMillis());
    }
    
    //購入IDを取得
    private String getId() {
        return nowDate().getTime() + "." + this.hashCode();
    }
}
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 
 
 
 
 
 
 
 
 
 
<html>
<head>
<title>ショッピングカートの内容</title>
</head>
<body>
  ${f:h(userid)}さん、ご購入ありがとうございました。
  <br>
  <s:link href="/catalog/list">商品一覧へ戻る</s:link>
</body>
</html>

添付ファイル: filesupersample2-6_5.jpg 223件 [詳細] filesupersample2-6_4.jpg 218件 [詳細] filesupersample2-6_3.jpg 223件 [詳細] filesupersample2-6_2.jpg 233件 [詳細] filesupersample2-6_1.jpg 266件 [詳細]

リロード   新規 編集 凍結解除 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2012-08-08 (水) 23:25:54 (2923d)