明日は東京のほうでseasarの集まりがあるんですね。うちの会社の東京の人も見に行くのかなー。
dewaさんがカンファレンス中でデモをするってLLみたいな芸当をやるので、僕もダイアリー書きながらできるかな。
ブックマークサイトつくってみる。
- まったく何も考えずに作る。
- 必要なDBはUSERとBOOKMARKくらい?
- phpMyAdminを使う。xamppにはいってるやつ。
CREATE TABLE `sabook`.`bookmark` ( `ID` INT( 8 ) NOT NULL , `URL` VARCHAR( 255 ) NOT NULL , `COMMENT` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `TIMESTAMP` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY ( `ID` ) ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_bin
うん。いろいろ足りないけど、ちょっとづつ作る感じでOK
Struts.configの追加
は、いりません。
初期画面をつくる。IndexActionね。よくわからんねんけど、まずは画面から作る。
index.vm velocity文法忘れたのでまずはダミーで。
<html> <head> <title>SABook</title> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> #errorMarkup() <h1>SABoooooook!!!</h1> 登録済みのブックマーク一覧: <hr /> <!-- foreachかくよてい --> <div> <p><a href="http://example.com/sameurl/">ページタイトル</a>: http://example.com/sameurl/</p> <p>ここにコメントが入る予定。</p> </div> </body> </html>
indexAction
package com.kusuke.action; import org.seasar.struts.annotation.Execute; public class IndexAction { @Execute(validator = false) public String index() { return "index.vm"; } }
うん。なにもない。おまけにEclispeの設定がcp932だったから文字化けした。
http://localhost:8080/sa-struts-wtp/
にアクセスしたら無事表示できた〜
トップページに一覧表示を作る前に、登録画面を作ろう。
はてブっぽく、エントリポイント名はentryにしよう。
entry.vm
<html> <head> <title>SABook</title> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> #errorMarkup() <h1>SABoooooook!!!</h1> ブックマークを登録します: <hr /> <form name="EntryActionForm" method="POST"> <p>ページタイトル: <input type="text" name="title" value="" /></p> <p>URL: <input type="text" name="url" value="" /></p> <p>コメント: <input type="text" name="comment" value="" /></p> <p><input type="submit" name="result" value=" 登録する " /></p> </form> </body> </html>
やっべ!titleカラムがない!!!追加せな
気づいたらphpMyAdminですぐ追加。
ALTER TABLE `bookmark` ADD `TITLE` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL AFTER `USER_ID` ;
次なにつくろ。ActionForm?
べつにいらないっぽい。あまり複雑にならないうちは、Actionに記載してもいいみたい。
publicのメンバとしてEntryActionに記述します。
@Required public String title; @Required @UrlType public String url; @Required public String comment;
予想やけど、org.seasar.annotation.xxxxでバリデータができるんちゃうかな。
完了Actionをつくる。
まずからっぽでつくる。validator=trueで。
@Execute(validator = true, input = "input.vm") public String result() { return "result.vm"; }
あーこれだけでValidatorもいけた。普通のStrutsでいうところの、validator.configとかActionMappingのValidator属性がPOJOの中にかけるんですね。
setter/getterがいらないとか、そういう無駄な処理を書かなくてよいのがところが便利。無駄な繰り返し処理を、ジェネレータでコマンドたたいて生成するって言うのは邪道だと最近感じていたので、ますます好感が持てます。
エンティティをつくる。
DBに書き込むためのエンティティクラスを作ります。
パッケージを先に作る。
チュートリアルのEmployeeを参考にするけど、こっちのアノテーションの意味があんまりわからなかった。
Java Persistence API っていうらしい。
しかしこちらもsetter/getterがないのっていいね。ソースコード略。
insertしてみる。
まずjdbcManagerの宣言。
public JdbcManager jdbcManager;
エンティティに画面からの値をセットするのも簡単。
Bookmark bmk = Beans.createAndCopy(Bookmark.class, this).execute();
insertも一行必殺。JAVAなので、control+cで保管させれば間違いもないし、返り値もintって表示されるので、マニュアル要らずです。
resultCount = jdbcManager.insert(bmk).execute();
あれ、ぬるぽでた、、、
行き当たりばったりだけど、とりあえずなおします。でもだめだった
SQLで例外(Message=[Field 'ID' doesn't have a default value
むーEntityの宣言があかんのかな。mysqlのauto_incrementなんだけど、@GeneratedValueはちゃうのかな。
auto_incrementがはいってないだけやったorz
insertできたーー
長くなったのでその2に続く予定