-------- 移行ガイド (1.0.x -> 1.1.x) -------- baba -------- 2008-09-07 -------- {目次} *{{{#1.0.x_から_1.1.x_への移行}1.0.x から 1.1.x への移行}} *{{{#互換性のない変更点}互換性のない変更点}} *{{{#リクエストパラメータをバインドするプロパティ}リクエストパラメータをバインドするプロパティ}} *{{{#リクエストパラメータをバインディングする際の型変換}リクエストパラメータをバインディングする際の型変換}} *{{{#マルチバイト文字を含む_URL_の文字化け}マルチバイト文字を含む URL の文字化け}} *{{{#推奨されない_API}推奨されない API}} *{{{#@Form#binding}@Form#binding}} {1.0.x から 1.1.x への移行} バージョン 1.0.x から 1.1.x へ移行する際に注意すべき点を解説します。 *{互換性のない変更点} **{リクエストパラメータをバインドするプロパティ} 1.0.x ではリクエストパラメータはその名前と同名のプロパティにバインドされます。\ これだと、想定外のパラメータが入力された場合には(インジェクションされることを想定したプロパティなど) 想定外のプロパティにバインドされてしまうことがあります。 たとえば、以下のソースではリクエストに "fooService" というパラメータがあった場合に fooService に String 型のオブジェクトをバインドしようとして例外が発生してしまいます。 +------------------------------------------------------+ public class FooAction extends Action { public String name; public FooService fooService; } +------------------------------------------------------+ これは問題があるので、1.1.x 以降ではバインドされるプロパティとバインドされないプロパティを明確に分類できるようになっています。 アクション自身にリクエストパラメータをバインドしていた場合は、リクエストパラメータをバインドしたいプロパティを @RequestParameter で修飾してください。 +------------------------------------------------------+ public class FooAction extends Action { public @RequestParameter String name; public FooService fooService; } +------------------------------------------------------+ また、1.0.x と同様にすべてのプロパティをバインド対象とすることもできます。\ 詳細は{{{#リクエストパラメータのバインド}リクエストパラメータのバインド}}を参照してください。 **{リクエストパラメータをバインディングする際の型変換} 1.0.x ではリクエストパラメータをバインディングする際の型変換に S2Dxo の機能、コンバータを使用していましたが、 1.1.x では型変換を内包しています。 org.seasar.extension.dxo.converter.Converter を実装した独自のコンバータクラスをコンテナに登録しておくことで型変換に使用することができましたが、 そのような独自コンバータを使っていた場合は org.seasar.cubby.converter.Converter を実装したクラスに置き換えてください。 @DxoConverter でプロパティごとに独自のコンバータを指定することができましたが、これは機能しません。 **{マルチバイト文字を含む URL の文字化け} 1.0.x では HttpServletRequest#getRequestURI() からパスを取得していましたが、 1.1.x では HttpServletRequest#getServletPath() からパスを取得するようになりました。 これは、Jetty など getRequestURI() の結果に URL 埋め込みセッション情報まで含むコンテナがあるためです。 しかし、副作用として Tomcat などのデフォルト状態では URL にマルチバイト文字が含まれる場合に文字化けしてしまいます。 回避するためには conf/server.xml の Connector ディレクティブに URIEncoding でエンコードを指定してください。 +------------------------------------------------------+ +------------------------------------------------------+ この設定はサーブレットコンテナに配備されたアプリケーション全体に影響します。 バージョン 1.1.1 以降ならば特定のアプリケーションだけにエンコードを指定したい場合はサーブレットフィルタ {{{cubby/apidocs/org/seasar/cubby/filter/EncodingFilter}org.seasar.cubby.filter.EncodingFilter}} の初期化パラメータで URI のエンコードを指定することができます。 *{推奨されない API} **{@Form#binding} {{{cubby/apidocs/org/seasar/cubby/action/Form.html#binding()}@Form#binding}} は推奨されない API となりました。\ リクエストパラメータをオブジェクトにバインドしない場合は {{{cubby/apidocs/org/seasar/cubby/action/Form.html#bindingType()}@Form#bindingType}} に {{{cubby/apidocs/org/seasar/cubby/action/RequestParameterBindingType#NONE}NONE)}} を指定してください。