S2Clickの設定

s2click.diconの設定

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オブジェクトを指定します。省略した場合はorg.seasar.s2click.util.S2ClickFormatが用いられます。
<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
ロケール。
logService
ログ出力を行うサービスクラスを指定します。省略した場合はorg.apache.click.service.ConsoleLogServiceが用いられます。
<property name="logService">
  <component class="sample.service.SampleLogService"/>
</property>
templateService
テンプレート処理を行うサービスクラスを指定します。省略した場合はorg.apache.click.service.VelocityTemplateServiceが用いられます。
<property name="templateService">
  <component class="sample.service.SampleTemplateService"/>
</property>
resourceService
静的リソースを提供するサービスクラスを指定します。省略した場合はorg.apache.click.service.ClickResourceServiceが用いられます。
<property name="resourceService">
  <component class="sample.service.SampleResourceService"/>
</property>
messageMapService
メッセージマップを作成するサービスクラスを指定します。省略した場合はorg.apache.click.service.DefaultMessagesMapServiceが用いられます。
<property name="resourceService">
  <component class="sample.service.SampleMessageMapService"/>
</property>
addPageInterceptor
ページクラスの作成、廃棄などのタイミングで処理を行いたい場合にorg.apache.click.PageInterceptorを実装したコンポーネントを指定します。
<!-- ページインターセプターをコンポーネントとして定義 -->
<component name="samplePageInterceptor"
  class="org.seasar.s2click.example.util.SamplePageInterceptor">
</component>

<component class="org.seasar.s2click.S2ClickConfig">
  <!-- ページインターセプターのコンポーネント名を指定 -->
  <initMethod name="addPageInterceptor">
    <arg>"samplePageInterceptor"</arg>
  </initMethod>
</component>

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に登録されます。

トランザクションの制御

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

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

<servlet>
  <servlet-name>ClickServlet</servlet-name>
  <servlet-class>org.seasar.s2click.servlet.S2ClickServletTx</servlet-class>
  <load-on-startup>2</load-on-startup>
</servlet> 

サービスのレイヤをトランザクションの境界とする場合はS2ClickServletTxを使う必要はありません。 costomizer.diconにてサービスクラスに対してTxAttributeCustomizerによってトランザクション管理用のインターセプターを適用するよう設定してください。

<component name="serviceCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
    <initMethod name="addCustomizer">
        <arg>txAttributeCustomizer</arg>
    </initMethod>
</component> 

リソースをクラスパス内に格納する

S2Clickにはクラスパス内に格納したイメージやJavaScriptなどをHTMLから参照するためのorg.seasar.s2click.servlet.ResourceServletが付属しています。

ResourceServletを使用することで、コントロールやアプリケーションが使用するCSSやイメージ、JavaScriptなどをクラスパスに含めることができます。 S2Clickが提供する拡張コントロールはResourceServletを使用してこれらのリソースを参照しているため、 Clickが本来提供しているリソースのデプロイ機構(アプリケーションの起動時に/clickにリソースをコピーする)を使用していません。

ResourceServletを使用するにはweb.xmlに以下のような設定を追加します。

<servlet>
  <servlet-name>ResourceServlet</servlet-name>
  <servlet-class>org.seasar.s2click.servlet.ResourceServlet</servlet-class>
  <init-param>
    <param-name>rootPackage</param-name>
    <param-value>org.seasar.s2click.example.resource</param-value>
  </init-param>
  <load-on-startup>3</load-on-startup>
</servlet>
...
<servlet-mapping>
  <servlet-name>ResourceServlet</servlet-name>
  <url-pattern>/resources/*</url-pattern>
</servlet-mapping> 

ResourceServletには初期化パラメータとしてrootPackageを指定する必要があります。 このパラメータにはリソースを格納するパッケージ名を指定してください。 パッケージ名はカンマで区切って複数指定することもできます。

上記の設定の場合、org.seasar.s2click.example.resourceパッケージ配下に配置したリソースに対し、 http://localhost:8080/s2click/resources/sample.gifというURLでアクセスすることができます(ホスト名、ポートやコンテキストは環境にあわせて読み替えてください)。

また、/resources/subpackage/sample.gifのようにパスをネストさせることでサブパッケージのリソースを参照することも可能です。