Seasar DI Container with AOP

S2Click - Click Framework with Seasar2

S2Clickとは、Seasar2とClick Frameworkを組み合わせて利用するためのアダプタです。 以下のような機能を提供します。

  • ClickのページクラスをS2Containerで管理することができます
  • ClickのページクラスのHOT deployに対応します
  • Seasar2が推奨するpublicフィールドをClickで扱いやすくするための機能を提供します
  • Clickの設定をSeasar2のdiconファイルに集約します
  • Java 5のアノテーションを活用した機能を提供します
  • Click標準では提供されていない便利なコントロールやユーティリティを提供します

なお、S2Clickの動作にはJava 5以降が必須です。

ダウンロード

サンプルを動かしてみる

リリースアーカイブを展開するとs2click-example.warというwarファイルがあります。 これはS2Clickのサンプルアプリケーションです。 Tomcatなどにデプロイし、Webブラウザからhttp://localhost:8080/s2click-exampleにアクセスすると動作を確認することができます。

スタートアップ

リリースアーカイブには以下のzipファイルが含まれています。これらはS2Clickによる開発をはじめるためのブランクプロジェクトです。 そのままEclipseにインポートしてご利用ください。

  • s2click-blank.zip (S2Clickのみ)
  • s2click-s2jdbc-blank.zip (S2Click + S2JDBC)

なお、ブランクプロジェクトは以下の環境が前提となっています。

  • Eclipse 3.3以上
  • WTP 2.0以上
  • Java 5.0以上
  • Apache Tomcat 6.0がServersビューに登録されていること

プロジェクトをインポートしたらWebContent/index.htmを右クリックし、 コンテキストメニューから[Run As] > [Run on Server]を選択してください。 Tomcatが起動し、足し算アプリが表示されるはずです。

なお、S2ClickのHOT deploy機能を利用する場合、Tomcat側でコンテキストのリロードが実行されないようにしておくと便利です。 WTPでは以下の手順でコンテキストのリロードを無効にすることができます。

  1. Serversビューで登録されているTomcatをダブルクリックする
  2. Tomcatの設定を行うためのエディタが表示されるので、[Modules]タブを選択する
  3. S2Clickのプロジェクトを選択して[Edit]ボタンをクリック
  4. [Auto reloading enabled]のチェックボックスのチェックを外す
Tomcatの設定変更

S2Clickの設定

s2click.diconでS2Clickの設定を行います。 org.seasar.s2click.S2ClickConfigのプロパティをセットすることで、 Clickの設定ファイルとほとんど同じ設定を行うことができます。 Clickの設定ファイルであるclick.xmlは作成する必要はありません(作成しても無視されます)。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
  "http://www.seasar.org/dtd/components24.dtd">
<components>
  <component class="org.seasar.s2click.S2ClickConfig">
    <property name="formatClass">
      @org.seasar.s2click.example.util.S2ClickFormat@class
    </property>
  </component>
</components> 

S2ClickConfigには以下のプロパティを設定可能です。

プロパティ 説明 設定例
charset 文字コードを指定します。デフォルトはUTF-8です。
<property name="charset">
  "Windows-31J"
</property>
formatClass Velocityテンプレートで使用可能なFormatオブジェクトを指定します。 デフォルトはnet.sf.click.util.Formatです。
<property name="formatClass">
  @example.util.S2ClickFormat@class
</property>
mode Clickの動作モード。production、profile、development、debug、traceのいずれかを指定します。デフォルトはdevelopmentです。
モードによってClickの動作(HTMLテンプレートのリロードを行うかどうか等)やログに出力される内容が変化します。 詳細についてはClickのドキュメントを参照してください。
<property name="mode">
  "development"
</property>
headers 共通ヘッダ
locale ロケール
controlSets コントロールセットを定義した設定ファイル群のパスを指定します。
controls デプロイ(ファイルの展開)が必要なコントロールクラス群を指定します。
fileItemFactory ClickのFileFieldコントロールが使用するCommons FileUploadのFileItemFactoryのインスタンス

S2Clickではページの自動マッピングは常に有効です。 また、ページクラスを配置するパッケージはSeasar2の規約に従ってconvension.diconの設定を使用します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
  "http://www.seasar.org/dtd/components24.dtd">
<components>
  <component class="org.seasar.framework.convention.impl.NamingConventionImpl">
    <initMethod name="addRootPackageName">
      <arg>"org.seasar.s2click.example"</arg>
    </initMethod>
  </component>
</components> 

この場合、ルートパッケージに.pageをつけたorg.seasar.s2click.example.pageパッケージにXxxxPageというクラス名(末尾がPageで終わるようにする) でページクラスを作成しておくと、自動的にS2Containerに登録されます。

publicフィールドの活用

Seasar2ではJavaBeanに無用なアクセサを設けず、publicフィールドを活用することが推奨されています(もちろんカプセル化の観点からアクセサメソッドを用意したほうがよいケースもあります)。 しかし、ClickはJavaBean規約に従いアクセサメソッドを持ったJavaBeanの利用が想定されています。 そこで、S2ClickではClickでもpublicフィールドを活用するための機能を提供します。

Velocityテンプレート
Clickではビュー技術としてVelocityを使用します(JSPを利用することも可能です)。 Velocityは標準ではpublicフィールドの利用をサポートしていませんが、 S2Clickではプロパティアクセスの構文でpublicフィールドにもアクセスすることができます。
Tableコントロール
ClickのTableコントロールはJavaBeanのリストを表形式で表示することができますが、 ゲッターメソッドを持ったJavaBeanの利用しかサポートされていません。 Clickが標準で提供しているnet.sf.click.control.Columnの代わりに org.seasar.s2click.control.PublicFieldColumnを利用することでTableコントロールでpublicフィールドを使用することが可能になります。
フォームとオブジェクトの相互変換
S2Clickが提供するorg.seasar.s2click.control.S2ClickFormクラスのcopyTo()メソッド、およびcopyFrom()メソッドはpublicフィールドに対応しています。 また、S2ClickUtilsクラスのcopyFormToObject()メソッド、およびcopyObjectToForm()メソッドも同様にpublicフィールドに対応しています。

リクエストパラメータのバインド

Click Frameworkは標準でページクラスのpublicフィールドに同じ名前のリクエストパラメータをバインドする機能を備えています。 しかし、S2ClickのページにはDI用のpublicフィールドも存在するため、リクエストパラメータによるDI用フィールドの上書きを防ぐため、 リクエストパラメータの自動バインド機能は利用できません。

代替手段として、@Requestアノテーションを付与したpublicフィールドにリクエストパラメータをバインドすることができます。 デフォルトではフィールド名と同じ名前のリクエストパラメータがバインドされますが、 @Requestアノテーションのパラメータによって別の名前のリクエストパラメータをバインドすることもできます。

public class HelloPage extends Page {

  /** idというリクエストパラメータをバインド */
  @Request
  public String id;

  /** articleというリクエストパラメータをバインド */
  @Request("article")
  public String articleId;
  
}

コントロール

クラス名 説明
org.seasar.s2click.control.S2ClickForm 入力フォームを作成する際に便利な機能を備えた抽象基底クラスです。
org.seasar.s2click.control.ConfirmSubmit フォームの送信前に確認ダイアログを表示する機能を備えたSubmitコントロールです。
org.seasar.s2click.control.DateFieldYYYYMMDD 日付をYYYY/MM/DD形式で表示するDateFieldコントロールです。
org.seasar.s2click.control.ToolTip jTipを使用したツールチップを表示するコントロールです。

ユーティリティ

org.seasar.s2click.util.S2ClickFormat

Click標準のnet.sf.click.util.Formatを拡張し、便利なメソッドを追加しています。 HTMLテンプレートでは$formatで参照することができます。

メソッド 説明
String url(String value) 引数に渡された文字列をs2click.diconで指定された文字コードでURLエンコードします。
String json(Object obj) JavaオブジェクトをJSONに変換します。
String nbsp(String value) 連続する半角スペースの2つめ以降を&nbsp;に変換します。

トランザクションの制御

Clickは1リクエストでページクラスのメソッドを複数回呼び出します。 そのため、ページクラスのメソッドに対してトランザクション制御のためのインターセプタを適用しようとするとメソッドごとにトランザクションが完結してしまいます。 S2Clickでは1リクエスト=1トランザクションでトランザクション制御を行うためのS2ClickServletTxが付属しています。

S2ClickServletTxを使用するにはweb.xmlでS2ClickServletの代わりにS2ClickServletTxを使うよう設定してください。

<servlet>
  <servlet-name>ClickServlet</servlet-name>
  <servlet-class>net.sf.click.S2ClickServletTx</servlet-class>
  <load-on-startup>2</load-on-startup>
</servlet> 

情報源

Click Framework
本家Click FrameworkのWebサイトです。英語ですが、非常に充実したドキュメントが提供されています。
Click Wiki
Clickの日本語Wikiサイトです。本家のドキュメントの翻訳などを行っています。
Click Framework探訪
オブジェクトの広場のClickに関する記事です。
シンプルかつ強力なコンポーネント指向フレームワーク「Click Framework」
ITProのClickに関する記事です。
新・たけぞう瀕死の日記
Clickのコミッタであり、S2Clickの開発者でもあるたけぞうの日記です。
Click Blog(英語)
Clickの開発チームのブログです。リリース情報などが掲載されています。
Clickのメーリングリスト(英語)
Clickのメーリングリストです。ユーザ向けと開発者向けが用意されています。過去ログは以下のURLでも参照することができます。
S2ClickのSubversionリポジトリ
S2ClickのSubversionリポジトリブラウザです。ソースコードはhttps://www.seasar.org/svn/sandbox/s2click/からチェックアウトできます。
S2ClickのJIRA
フィードバックやバグレポートはこちらにどうぞ。