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
のようにパスをネストさせることでサブパッケージのリソースを参照することも可能です。