2012年3月26日月曜日

grailsとjQuery Mobileでチェックボックスを表示する

grailsとjQuery Mobileでチェックボックスを表示するには、以下の手順を実行します。

1. ApplicationResources.groovyでモジュールを宣言
modules = {
    application {
        resource url:'js/application.js'
    }
    // jQuery mobileのモジュールを宣言
    jquerymobile {
      dependsOn 'jquery'
      resource url: 'js/jquery.mobile-1.1.0-rc.1.min.js', disposition:'head'
      resource url: 'css/jquery.mobile-1.1.0-rc.1.min.css'
    }
}
jquery.mobile-1.1.0-rc.1.min.jsはweb-app/jsに、jquery.mobile-1.1.0-rc.1.min.cssはweb-app/cssに 画像類はweb-app/css/imagesに配置します。

2. web-app/WEB-INF/sitemesh.xmlに以下のようにexcludes要素を追加します。
<sitemesh>
<!-- sitemesh除外 -->
<excludes file="/WEB-INF/sitemesh-excludes.xml" />
    <page-parsers>
        <parser content-type="text/html"
            class="org.codehaus.groovy.grails.web.sitemesh.GrailsHTMLPageParser" />
        <parser content-type="text/html;charset=ISO-8859-1"
            class="org.codehaus.groovy.grails.web.sitemesh.GrailsHTMLPageParser" />
        <parser content-type="text/html;charset=UTF-8"
            class="org.codehaus.groovy.grails.web.sitemesh.GrailsHTMLPageParser" />
    </page-parsers>

    <decorator-mappers>
        <mapper class="org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper" />
    </decorator-mappers>
</sitemesh>
3. sitemesh-excludes.xmlを以下のように作成し、web-app/WEB-INF/に配置します。
<?xml version="1.0" encoding="UTF-8"?>
<sitemesh-excludes>
  <excludes>
    <pattern>/*</pattern>
  </excludes>
</sitemesh-excludes>
4. index.gspを以下のように変更します。
<!DOCTYPE html> 
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1"> 
  <title>grails and jQuery mobile</title> 
  <style type="text/css" media="screen">
/* headerが...で省略されるのを防ぐ  */
body .ui-header .ui-title {
  white-space: normal;
  margin-left: 0;
  margin-right: 0;
}
  </style>
  <!-- jquerymobileを使用 -->
  <r:require module="jquerymobile"/>
  <r:layoutResources />
</head> 
<body> 
  <div data-role="page">
    <div data-role="header">
      <h1>チェックボックスのサンプル</h1>
    </div>
    <div data-role="content">
      <div data-role="fieldcontain">
        <fieldset data-role="controlgroup">
          <legend>移動手段1:</legend>
          <g:checkBox name="checkbox1" id="trans1" value="car" checked="true" />
          <label for="trans1">自動車</label>
          <g:checkBox name="checkbox1" id="trans2" value="train" checked="false" />
          <label for="trans2">電車</label>
          <g:checkBox name="checkbox1" id="trans3" value="airplane" checked="false" />
          <label for="trans3">飛行機</label>
        </fieldset>
      </div>
      <!-- ミニバージョンのチェックボックス -->
      <div data-role="fieldcontain">
        <fieldset data-role="controlgroup" data-mini="true">
          <legend>移動手段2:</legend>
          <g:checkBox name="checkbox2" id="trans1" value="car" data-mini="true" checked="false" />
          <label for="trans1">自動車</label>
          <g:checkBox name="checkbox2" id="trans2" value="train" data-mini="true" checked="true" />
          <label for="trans2">電車</label>
          <g:checkBox name="checkbox2" id="trans3" value="airplane" data-mini="true" checked="false" />
          <label for="trans3">飛行機</label>
        </fieldset>
      </div>
    </div>
    <div data-role="footer">
      <h4>フッター</h4>
    </div>
  </div>
<r:layoutResources />
</body>
</html>
出力画面

動作環境
grails 2.0.1

関連情報
jQuery mobileのホームページ
http://jquerymobile.com/

0 件のコメント:

コメントを投稿