Grails0.5.5-SNAPSHOT 検証...
Grails0.5.5-SNAPSHOT 検証...
T.Yamamotoのブログにあったgrails0.5の新機能をざっくりと検証してみました。(翻訳GoodJob!)
conf フォルダにある [YourApplicationName]UrlMapping.groovy というファイルに設定する。
ただし、標準のままでは web.xml から読込んだサーブレットなどが動作しなくなってしまう。
以下の方法で回避可能
class LabeltestUrlMappings {
static mappings = {
"/ui/$controller/$action?/$id?"{ ← /ui を追加
constraints {
// apply constraints here
}
}
}
}
これにより、自動生成されるURLが変更され、他のサーブレットに影響を与えなくなる。
http://localhost:8080/book/list
↓↓↓
http://localhost:8080/ui/book/list
createLink等で生成されるURLは自動的に /ui 付きに置き換わるので気にしないでOK
ただし index.gsp のコントローラーのリンクリストは違う方法でリンクしてるので注意
index.gsp内を以下のように修正すればモウマンタイ(何故か変換出来ない)
<div class="dialog" style="margin-left:20px;width:60%;">
<ul>
<g:each var="c" in="${grailsApplication.controllerClasses}">
<li class="controller"><a href="ui/${c.logicalPropertyName}">${c.fullName}</a></li> ← href 部分に ui/ 追加
</g:each>
</ul>
</div>
マッピングの定義は以下のようにする
class [YourApplicationName]UrlMappings {
static mappings = {
// /ui/book/show/1 -> /ktkr/nu-n/1
"/ktkr/nu-n/$id?" {
controller = "book"
action = "show"
}
// /ui/book/edit/1 -> /ktkr/na-n/1
"/ktkr/na-n/$id" {
controller = "book"
action = "edit"
}
// これを指定しておくと、指定されてないマッピングを今までどうりのルールでアクセスできる //
"/ui/$controller/$action?/$id?"{
constraints {
}
}
}
}
Controller部分のみを変更すると一部動作しなかった、、、Actionまでちゃんと区切った方がよさそう
フォームからのパラメーターにバリデーションがかけられる
src/groovy か controllers フォルダにファイルを作成する。(src/groovy はなんか挙動があやしいので controllers にいれてテスト)
class BookCommand {
String title
String mail
static constraints = {
title(blank:false,nullable:false,minSize:5,maxSize:10)
mail(email:true)
}
}
class BookController {
def test = { BookCommand cmd ->
if(cmd.hasErrors()) {
println "error"
} else {
println "ok"
}
}
}
book/testへアクセスした時にBookCommandのバリデーションをかけられる。
上記の例だと以下の結果になる
/book/test? ×
/book/test?title= ×
/book/test?title=a ×
/book/test?title=hogehoge ○
/book/test?title=hogehoge&mail=noemail ×
/book/test?title=hogehoge&mail=email@address.jp ○
インストール時、アップグレード時に自動実行してくれる Script が追加された。
プラグインの Scripts フォルダに _Install.groovy , _Upgrade.groovy を置くだけ。中身は GANT で記述
2007/5/9 Executing xxx plugin post-install script ... のメッセージは出たが実行されてないもよう
List
static hasMany = [books:Book]
List books
今まで hasMany だけだと Set できてたけど、List でかいてやると List で来る
Map
Map hoge
普通に hasMany っぽいテーブルが出来る
テーブルが出来るのはちょっとやだなぁ、、、
one-to-one の関係をテーブル的に一つにまとめられる機能
class Book {
static embedded = ['saleMaker','modMaker']
String title
String author
Maker saleMaker
Maker modMaker
static constraints = {
modMaker(nullable:true)
}
}
2007/5/9 テーブルはちゃんと作られる バリデーション等も機能するが、保存時(実際にDBへ書き込みにいく時)に以下のエラーが出る
Could not execute JDBC batch update; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
.encodeAsBase64() でエンコードされる
文字列、数値、日付、なんでもエンコード出来た
新機能はなかなかうまくいきませんね、早く安定版になってほしいです
T.Yamamotoのブログにあったgrails0.5の新機能をざっくりと検証してみました。(翻訳GoodJob!)
URLマッピング
conf フォルダにある [YourApplicationName]UrlMapping.groovy というファイルに設定する。
ただし、標準のままでは web.xml から読込んだサーブレットなどが動作しなくなってしまう。
以下の方法で回避可能
class LabeltestUrlMappings {
static mappings = {
"/ui/$controller/$action?/$id?"{ ← /ui を追加
constraints {
// apply constraints here
}
}
}
}
これにより、自動生成されるURLが変更され、他のサーブレットに影響を与えなくなる。
http://localhost:8080/book/list
↓↓↓
http://localhost:8080/ui/book/list
createLink等で生成されるURLは自動的に /ui 付きに置き換わるので気にしないでOK
ただし index.gsp のコントローラーのリンクリストは違う方法でリンクしてるので注意
index.gsp内を以下のように修正すればモウマンタイ(何故か変換出来ない)
<div class="dialog" style="margin-left:20px;width:60%;">
<ul>
<g:each var="c" in="${grailsApplication.controllerClasses}">
<li class="controller"><a href="ui/${c.logicalPropertyName}">${c.fullName}</a></li> ← href 部分に ui/ 追加
</g:each>
</ul>
</div>
マッピングの定義は以下のようにする
class [YourApplicationName]UrlMappings {
static mappings = {
// /ui/book/show/1 -> /ktkr/nu-n/1
"/ktkr/nu-n/$id?" {
controller = "book"
action = "show"
}
// /ui/book/edit/1 -> /ktkr/na-n/1
"/ktkr/na-n/$id" {
controller = "book"
action = "edit"
}
// これを指定しておくと、指定されてないマッピングを今までどうりのルールでアクセスできる //
"/ui/$controller/$action?/$id?"{
constraints {
}
}
}
}
Controller部分のみを変更すると一部動作しなかった、、、Actionまでちゃんと区切った方がよさそう
CommandObject
フォームからのパラメーターにバリデーションがかけられる
src/groovy か controllers フォルダにファイルを作成する。(src/groovy はなんか挙動があやしいので controllers にいれてテスト)
class BookCommand {
String title
String mail
static constraints = {
title(blank:false,nullable:false,minSize:5,maxSize:10)
mail(email:true)
}
}
class BookController {
def test = { BookCommand cmd ->
if(cmd.hasErrors()) {
println "error"
} else {
println "ok"
}
}
}
book/testへアクセスした時にBookCommandのバリデーションをかけられる。
上記の例だと以下の結果になる
/book/test? ×
/book/test?title= ×
/book/test?title=a ×
/book/test?title=hogehoge ○
/book/test?title=hogehoge&mail=noemail ×
/book/test?title=hogehoge&mail=email@address.jp ○
Plugin
インストール時、アップグレード時に自動実行してくれる Script が追加された。
プラグインの Scripts フォルダに _Install.groovy , _Upgrade.groovy を置くだけ。中身は GANT で記述
2007/5/9 Executing xxx plugin post-install script ... のメッセージは出たが実行されてないもよう
GORM - List Map
List
static hasMany = [books:Book]
List books
今まで hasMany だけだと Set できてたけど、List でかいてやると List で来る
Map
Map hoge
普通に hasMany っぽいテーブルが出来る
テーブルが出来るのはちょっとやだなぁ、、、
GORM - Embedded
one-to-one の関係をテーブル的に一つにまとめられる機能
class Book {
static embedded = ['saleMaker','modMaker']
String title
String author
Maker saleMaker
Maker modMaker
static constraints = {
modMaker(nullable:true)
}
}
2007/5/9 テーブルはちゃんと作られる バリデーション等も機能するが、保存時(実際にDBへ書き込みにいく時)に以下のエラーが出る
Could not execute JDBC batch update; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
Base64 エンコーディング
.encodeAsBase64() でエンコードされる
文字列、数値、日付、なんでもエンコード出来た
新機能はなかなかうまくいきませんね、早く安定版になってほしいです