GSPでJSPのカスタムタグが利用可能に

Grailsでは標準のビュー技術として「GSP(Groovy Server Pages)」を使用する。GSPとはその名の通り、いわばJSPのGroovy版だ。

Grails 1.1ではGSPでJSPのカスタムタグをそのまま利用できるようになった。タグ形式ではなく以下のようにメソッド呼び出しの形式で呼び出すことも可能だ。既存のカスタムタグの資産がある場合には便利な機能だろう。

<!-- JSPのカスタムタグをそのまま利用可能 -->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:formatNumber value="${10}" pattern=".00"/>

<!-- 関数形式でも呼び出し可能 -->
${fmt.formatNumber(value:10, pattern:".00")}

REST風のマッピングが可能に

U RLマッピングで以下のような記述を行うことでREST風のマッピングが可能になった。

"/books"(resource:"book")

この場合、/bookというURLに対してリクエストのHTTPメソッドによって呼び出されるアクションが決定される。GETの場合show()、PUTの場合save()、POSTの場合update()、DELETEの場合delete()メソッドがそれぞれ呼び出される。

また、URLマッピングでは以下のように例外のハンドリングを宣言的に記述できるようになっている。

"500"(controller:"errors", exception:IllegalArgumentException)

二重サブミット対策

Strutsでは二重サブミット(送信ボタンを連続でクリックされた場合に同じリクエストが二度送信されてしまうこと)への対策としてトランザクショントークンという機能がある。Grails 1.1では標準でこれと同様の機能がサポートされた。

<g:form useToken="true">

コントローラでは以下のようにwithFormメソッドを使用して正しいリクエストと不正なリクエストを判別することができる。

withForm {
   // 正常なリクエスト
}.invalidToken {
   // 不正なリクエスト
}

この他、コントローラではこれまでのredirect()メソッドの代わりにforward()メソッドを使用することでリクエストをサーバサイドで別のアクションに転送することもできるようになっている。