待望のリリースです。Clickチームからのアナウンスは以下になります。
1つ前の2.0系はSourceForge.netで開発していたバージョンをそのままApache Incubatorに移行したものだったので、機能追加などはSourceForge.netで最後にリリースされた1.5系以来ということになります。なので新機能てんこ盛りです。また、Apacheのトップレベルプロジェクトへの昇格を待っていたため、リリースまでに予想外に時間がかかってしまいました(長かった…)。
新機能のリストを日本語訳したものを以下に掲載しておきます。
- Google App Engineのサポート。詳細はGoogleAppEngineListenerを参照。
- Google App Engineで使用するためのインメモリFileUploadServiceを追加。
- ConfigService#isTemplate()によって独自の拡張子を持つテンプレートに対応。
- ページクラスのgetHeadElements()が返却する要素をhead要素に含めるかどうかをincludeControlHeadElementsで制御できるようになった。
- Servlet 3.0で規定されたJARファイル内のロケーションMETA-INF/resourcesからリソースをデプロイできるようにした。Clickが提供するリソースもMETA-INF/resourcesに移動した。
- DateFieldコントロールにCalendar Date Selectを使用したポップアップカレンダが復活。ただし、このコントロールはprototype.jsに依存しているため、prototype.jsを使いたくない場合はClick calendarを使用してください。
- JavaScriptやCSSなどHEAD要素のファーストクラスサポート。クラスしてElement、ResourceElement、JsImport、JsScript、CssImport、CssStyleを追加。また、メソッドとしてControl#getHeadElements()、Page#getHeadElements()を追加。
- Formを送信するためのSubmitLinkコントロールを追加。
- hiddenフィールドのリストをレンダリングするためのHiddenListコントロールを追加。
- Menuクラスにプラガブルなセキュリティアクセス制御を行うためのAccessControllerを追加。このインターフェースを用いることでSpring Security(Acegi)やJSecurityといったセキュリティフレームワークを使ってユーザがメニュー項目にアクセスできるかどうかを制御することができる。
- 静的なリソースをビルド時にデプロイするためのDeployTaskというAntタスクを追加。詳細についてはDeploying resources in a restricted environmentを参照。
- 実行時に静的なリソースを提供するためのResourceServiceを追加。詳細についてはDeploying resources in a restricted environmentを参照。
- ClickUtils#createTemplateModel()を追加。このメソッドはコンテキストパス、ページのパス、HTTPリクエスト、レスポンス、セッションなどを格納したテンプレート用のモデルを返す。
- TreeNodeにアイコンを設定するためのTreeNode#setIcon()メソッドを追加。
- テンプレートでURLエンコードを行うためのFormat#url()メソッドを追加。
- FieldColumn#setProperty()メソッドを追加。このメソッドをオーバーライドすることでバインディングをカスタマイズ可能。
- ClickServletにTypeConverterの設定を行うオプションを追加。詳細についてはgetTypeConverter()を参照してください。
- 複数のアプリケーションサーバをサポートするためのSlf4jLogServiceを追加。
- ページクラスのフィールドをテンプレートモデルにバインドするための@Bindableアノテーションを追加。このアノテーションはpublic、protected、privateメソッドをサポートします。
- ロシア言語向けのプロパティファイルを追加。
- TreeにsetWith()、getWith()、setHeight()、getHeight()メソッドを追加。また、IE6でのレンダリングに関する問題を修正。
- click.xmlのDTDをhttp://click.apache.org/dtds/click-2.1.dtdに配置。click.xmlへの記述例は以下のようになります。
<!DOCTYPE click-app PUBLIC "-//Apache Software Foundation//DTD Click Configuration 2.1//EN" "http://click.apache.org/dtds/click_2_1.dtd">
- Formのサブクラスがvalidate()メソッドをオーバーライドし、相関チェックを実装できるようにFormのバリデーションを改善。以前のvalidate()メソッドはvalidateFileUpload()メソッドにリネームされ、validate()メソッドが空の実装になったことで安全にオーバーライドすることが可能になった。
- リンク系のコントロールで複数のパラメータを扱うためのgetParameterValues()、setParameterValues()メソッドがAbstractLinkに追加された。
- TableコントロールのgetFirstRow()とgetLastRow()をpublicに変更することで、非常に大きなデータセットのサポートを改善。これらのメソッドは表示する行のレンダリングに必要な情報を返します。
- LinkDecoratorがターゲットのidパラメータの別名をサポートするよう改善された。
- PickListのgetValueObject()、setValueObject()がそれぞれsetSelectedValues()、addSelectedValue()に委譲するよう修正された。-
- Springインテグレーションの改善。SpringClickServletとPageScopeResolverが@ComponentアノテーションによってSpringでインスタンス化されたページをサポートするようになった。
- CompressionServletResponseWrapperとCompressionResponseStreamが独自のフィルタでも利用できるよう、publicクラスに変更された。
- Menuコントロールが、選択されているメニュー項目にclass="selected"をレンダリングするよう改善された。
- PerformanceFilterにexclude-pathによるフィルタリングが実装された。
- XmlConfigServiceがデプロイ可能なリソースをクラスパス内のフォルダからスキャンするよう改善された。
- LifecycleListenerのサポートを含む、Cayenne用のDataContextFilterの改善。
- AbstractLinkがアイコンとラベルの両方をレンダリングできるよう改善された(デフォルトの振る舞いはラベルかアイコンのどちらかをレンダリング)。
- ページとコントロールのメッセージハンドリングにおいてnull引数を許容するよう改善。
- JBoss5におけるリソースのデプロイに関する問題を修正。このソリューションはStripes Frameworkの開発者たちの成果に基づいています。
Google App EngineのサポートやJavaScript、CSSなどの扱いの改善、静的リソースのデプロイ周りの改善が大きなところでしょうか。
ここのところClick本体にはあまり貢献できていなかったのですが、今回は久々に新機能の追加ができるリリースだったということで、HiddenListやFormat#url()など、S2Clickで実装していた機能を本家にフィードバックしてみました。Click 2.1.0に対応したClickIDE 2.1.0.0やS2Clickも近日中にリリースしようと思います。