jp.terasoluna.fw.web.rich.springmvc.controller
クラス TerasolunaController<P,R>

java.lang.Object
  上位を拡張 org.springframework.context.support.ApplicationObjectSupport
      上位を拡張 org.springframework.web.context.support.WebApplicationObjectSupport
          上位を拡張 org.springframework.web.servlet.support.WebContentGenerator
              上位を拡張 org.springframework.web.servlet.mvc.AbstractController
                  上位を拡張 org.springframework.web.servlet.mvc.BaseCommandController
                      上位を拡張 org.springframework.web.servlet.mvc.AbstractCommandController
                          上位を拡張 jp.terasoluna.fw.web.rich.springmvc.controller.TerasolunaController<P,R>
型パラメータ:
P - コマンドクラス。サービス層のクラスへ渡すクラス。
R - モデルクラス。サービス層のクラスから返されるクラス。
すべての実装されたインタフェース:
org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationContextAware, org.springframework.web.context.ServletContextAware, org.springframework.web.servlet.mvc.Controller
直系の既知のサブクラス:
BLogicController

public abstract class TerasolunaController<P,R>
extends org.springframework.web.servlet.mvc.AbstractCommandController
implements org.springframework.beans.factory.InitializingBean

サービス層のクラスを実行するリクエストコントローラ抽象クラス。

本コントローラは、DispachServletから起動され、 以下の機能を提供する。

本クラスは、抽象クラスである。 業務開発者が、リクエストごとに本クラスの実装クラスを作成すること。 本クラスは、型パラメータを利用して宣言されている。 型パラメータPは、HTTPリクエストをバインドしたJavaBean(コマンド)、 型パラメータRは、Viewに反映させる情報を保持するJavaBean(モデル)の型をあらわしている。 実装クラス宣言時に、型パラメータに実際の型を指定し、 抽象メソッドの型変数も指定した型にあわせて実装することで 実装クラスの型の安全性を保障させている。 型パラメータにP,Rには、必ず引き数なしコンストラクタを持つJavaBeanを指定すること。 インタフェース、抽象クラス、引き数なしコンストラクタを持たないクラスの指定は出来ない。

サービス層のクラスの実行
サービス層のクラスは、DIコンテナを利用して本コントローラに設定されることを前提とするので、 業務開発者はサービス層のクラスを属性として用意し、setter/getterメソッドを設けること。 また、呼び出し処理は、抽象メソッドであるexecuteServiceメソッドに実装すること。

業務処理で例外が発生した場合、 Spring MVCの例外処理機構でハンドリングされる。

バインド処理
ServletRequestDataBinder継承クラスが行う。 ServletRequestDataBinderを生成するためのクラスであるDataBinderCreatorを DIコンテナを利用して本コントローラに設定すること。 DataBinderCreatorは、リクエストの形式(XML or Query)により使いわける。 バインド処理で、バインドエラーが発生した場合、BindExceptionがスローされ、 Spring MVCの例外処理機構でハンドリングされる。

入力チェック処理
Validatorインタフェース実装クラスが行う。 Validatorインタフェース実装クラスを DIコンテナを利用して本コントローラに設定すること。 入力チェック処理で、入力チェックエラーが発生した場合、 BindExceptionがスローされ、 Spring MVCの例外処理機構でハンドリングされる。

ビュー名の設定
DispachServletでのビュー解決に使用されるビュー名を handle(HttpServletRequest, HttpServletResponse, Object, BindException) メソッド内で設定している。 ビュー名は、以下の順番で決定される。

※・・・TERASOLUNAの初期設定では、ビュー名に空文字が入っていると Castorビューを使用する仕様になっている。

トランザクション管理の責務は、サービス層が受け持つ。 (ただし、AOPによる宣言的トランザクションを利用するので、 サービス層のクラスが意識する必要はない。)

作成した実装クラスを利用するには、Beanの定義を行うこと。

xxx-servlet.xmlの定義例】

   <bean name="/secure/blogic/sum.do"
       class="jp.terasoluna.sample2.web.controller.SumController"
       parent="xmlRequestController" singleton ="false">
     <property name="sumService" ref="sumService"/>
     <property name="ctxSupport" ref="ctxSupport"/>  
     <property name="dataBinderCreator" ref="xmlDataBinderCreator"/>
     <property name="validator" ref="sumValidator"/>
   </bean>
 

以下のプロパティを設定すること。

属性名 必須 説明
ctxSupport 制御情報サポートクラス。
dataBinderCreator リクエストデータバインダ生成クラス。
validator × 入力チェッククラス。
viewName × ビュー名。 デフォルト以外のView技術(Velocity,バイナリデータ, PDF, Excel等)を 利用する場合に設定する。
useRequestNameView × ビュー名にリクエスト名を使用するか判断するフラグ。 デフォルトはfalse。リクエスト名を使用したい場合、trueを設定する。 trueが設定されていても、viewNameが入力されていればviewNameに 対応するビューが使用される。
このほかに実行するサービス層のクラスをプロパティに設定すること。 コマンドクラス名を指定する、commandclass属性の指定は不要である。 コマンドクラスの型は、本クラスの型パラメータより、自動的に判断するためである。

また、制御情報サポートクラス、リクエストデータバインダ生成クラスの設定は、 複数のコントローラ定義で同一になる。 よって、抽象Bean定義をあらかじめ設定しておき、 実装クラスのBean定義は、抽象Bean定義を継承して行うと 設定ファイルの記述がシンプルになる。

【抽象Bean定義を利用したxxx-servlet.xmlの定義例】

   <!-- コントローラの抽象Bean定義 -->
   <bean id="xmlRequestController" abstract="true">
     <property name="cxtSupport" ref="ctxSupport"/>  
     <property name="dataBinderCreator" ref="xmlDataBinderCreator"/>
   </bean>

   <!-- 抽象Bean定義を継承したコントローラの定義 -->
   <bean name="/secure/blogic/sum.do"
       class="jp.terasoluna.sample2.web.controller.SumController"
       parent="xmlRequestController" scope="singleton">
     <property name="sumService" ref="sumService"/>
     <property name="validator" ref="sumValidator"/>
   </bean>
 

TERASOLUNAでは、 あらかじめいくつかの抽象Bean定義が用意されている。必要に応じて利用すること。

抽象Bean名 親Bean名 受信リクエスト 起動サービス ビュー 追加プロパティ
pojoController - - POJO - ctxSupport="ctxSupport"
validator="beanValidator"
※beanValidatorはデフォルトでコメントアウトされ無効
pojoXmlRequestController pojoController XML POJO - dataBinderCreator="XmlDataBinderCreator"
pojoXmlRequestCastorViewController pojoXmlRequestController XML POJO Castor -
pojoXmlRequestVelocityViewController pojoXmlRequestController XML POJO Velocity useRequestNameView="true"
pojoXmlRequestDefaultFileDownloadViewController pojoXmlRequestController XML POJO DefaultFileDownloadView viewName="FileDownloadSample"
pojoQueryRequestController pojoController クエリ POJO - dataBinderCreator="queryDataBinderCreator"
pojoQueryRequestCastorViewController pojoQueryRequestController クエリ POJO Castor -
pojoQueryRequestVelocityViewController pojoQueryRequestController クエリ POJO Velocity useRequestNameView="true"
pojoQueryRequestDefaultFileDownloadViewController pojoQueryRequestController クエリ POJO DefaultFileDownloadView viewName="FileDownloadSample"
blogicController - - BLogic - ctxSupport="ctxSupport"
validator="beanValidator"
※beanValidatorはデフォルトでコメントアウトされ無効
blogicXmlRequestController blogicController XML BLogic - dataBinderCreator="xmlDataBinderCreator"
blogicXmlRequestCastorViewController blogicXmlRequestController XML BLogic Castor -
blogicXmlRequestVelocityViewController blogicXmlRequestController XML BLogic Velocity useRequestNameView="true"
blogicXmlRequestDefaultFileDownloadViewController blogicXmlRequestController XML BLogic DefaultFileDownloadView viewName="FileDownloadSample"
blogicQueryRequestController blogicController クエリ BLogic - dataBinderCreator="queryDataBinderCreator"
blogicQueryRequestCastorViewController blogicQueryRequestController クエリ BLogic Castor -
blogicQueryRequestVelocityViewController blogicQueryRequestController クエリ BLogic Velocity useRequestNameView="true"
blogicQueryRequestDefaultFileDownloadViewController blogicQueryRequestController クエリ BLogic DefaultFileDownloadView viewName="FileDownloadSample"
pojoXmlSchemaValidatorRequestController pojoController - POJO - pojoController="xmlSchemaValidatorDataBinderCreator"
※schemaValidatorはデフォルトではコメントアウトされ無効
pojoXmlSchemaValidatorRequestCastorViewController blogicController - BLogic - pojoController="xmlSchemaValidatorDataBinderCreator"
※schemaValidatorはデフォルトではコメントアウトされ無効

適用先システムに特化した業務前処理、後処理を追加したい場合 (例えば業務処理パラメータや業務処理結果に セッションの情報を反映したい場合等)、 preService、postServiceメソッドをオーバーライドした実装クラスを作成し、 利用すること。
サブクラスで抽象クラスを使用する場合、getCommandType()メソッドを オーバーライドする必要がある。

起動するサービス層のクラスとしてPOJOではなく、 BLogicインタフェース実装クラスを利用することも可能である。 詳細はBLogicControllerを参照のこと。

関連項目:
BLogicController

フィールドの概要
protected  RequestContextSupport ctxSupport
          制御情報を扱うサポートロジッククラス。
protected  ServletRequestDataBinderCreator dataBinderCreator
          ServletRequestDataBinder継承クラスを生成するクラス。
protected  Class parameterizedControllerClass
          型パラメータを定義しているコントローラクラス。
protected  boolean useRequestNameView
          ビュー名にリクエスト名を使用するか判断するフラグ。
protected  String viewName
          デフォルト以外のビュー技術(Velocity,バイナリデータ, PDF, Excel)を 利用する場合に設定するビュー名。
 
クラス org.springframework.web.servlet.mvc.BaseCommandController から継承されたフィールド
DEFAULT_COMMAND_NAME
 
クラス org.springframework.web.servlet.support.WebContentGenerator から継承されたフィールド
METHOD_GET, METHOD_HEAD, METHOD_POST
 
クラス org.springframework.context.support.ApplicationObjectSupport から継承されたフィールド
logger
 
コンストラクタの概要
TerasolunaController()
           
 
メソッドの概要
 void afterPropertiesSet()
          DIコンテナによってインスタンス化された直後に呼ばれるメソッド。
protected  org.springframework.web.bind.ServletRequestDataBinder createBinder(javax.servlet.http.HttpServletRequest request, Object command)
          リクエストの情報をJavaBean(コマンド)に格納するための データバインダを生成する。
protected  R executeService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, P command)
          業務ロジックを実行する。
protected abstract  R executeService(P command)
          業務開発者が実装すべき、業務ロジックの実行処理。
protected  Object getCommand(javax.servlet.http.HttpServletRequest request)
          リクエストの情報を格納するためのJavaBean(コマンド)を取得する。
protected  Type getCommandType()
          本クラスのサブクラス定義された、コマンドクラスの実タイプを取得する。
protected  org.springframework.web.servlet.ModelAndView handle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object command, org.springframework.validation.BindException errors)
          業務ロジック実行メソッドを呼び出し、モデルとビューを返却する。
protected  void onBind(javax.servlet.http.HttpServletRequest request, Object command, org.springframework.validation.BindException errors)
          リクエストの情報をJavaBean(コマンド)に格納した後に実行される処理。
protected  void onBindAndValidate(javax.servlet.http.HttpServletRequest request, Object command, org.springframework.validation.BindException errors)
          入力チェックの後処理。
protected  void postService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, P command, R modelAndView)
          業務ロジック実行後処理。
protected  void preService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, P command)
          業務ロジック実行前処理。
 void setCtxSupport(RequestContextSupport ctxSupport)
          コンテキストを扱うサポートロジッククラスを設定する。
 void setDataBinderCreator(ServletRequestDataBinderCreator dataBinderCreator)
          DataBinder生成するクラスを設定する。
 void setUseRequestNameView(boolean useRequestNameView)
          ビュー名にリクエスト名を使用するか判断するフラグを設定する。
 void setViewName(String viewName)
          ビュー名を設定する。
 
クラス org.springframework.web.servlet.mvc.AbstractCommandController から継承されたメソッド
handleRequestInternal
 
クラス org.springframework.web.servlet.mvc.BaseCommandController から継承されたメソッド
bindAndValidate, checkCommand, createCommand, getBindingErrorProcessor, getCommandClass, getCommandName, getMessageCodesResolver, getPropertyEditorRegistrars, getValidator, getValidators, getWebBindingInitializer, initApplicationContext, initBinder, isValidateOnBinding, onBind, prepareBinder, setBindingErrorProcessor, setCommandClass, setCommandName, setMessageCodesResolver, setPropertyEditorRegistrar, setPropertyEditorRegistrars, setValidateOnBinding, setValidator, setValidators, setWebBindingInitializer, suppressBinding, suppressValidation, suppressValidation, suppressValidation, useDirectFieldAccess
 
クラス org.springframework.web.servlet.mvc.AbstractController から継承されたメソッド
handleRequest, isSynchronizeOnSession, setSynchronizeOnSession
 
クラス org.springframework.web.servlet.support.WebContentGenerator から継承されたメソッド
applyCacheSeconds, applyCacheSeconds, cacheForSeconds, cacheForSeconds, checkAndPrepare, checkAndPrepare, getCacheSeconds, getSupportedMethods, isRequireSession, isUseCacheControlHeader, isUseCacheControlNoStore, isUseExpiresHeader, preventCaching, setCacheSeconds, setRequireSession, setSupportedMethods, setUseCacheControlHeader, setUseCacheControlNoStore, setUseExpiresHeader
 
クラス org.springframework.web.context.support.WebApplicationObjectSupport から継承されたメソッド
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext
 
クラス org.springframework.context.support.ApplicationObjectSupport から継承されたメソッド
getApplicationContext, getMessageSourceAccessor, requiredContextClass, setApplicationContext
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

parameterizedControllerClass

protected Class parameterizedControllerClass
型パラメータを定義しているコントローラクラス。


ctxSupport

protected RequestContextSupport ctxSupport
制御情報を扱うサポートロジッククラス。


dataBinderCreator

protected ServletRequestDataBinderCreator dataBinderCreator
ServletRequestDataBinder継承クラスを生成するクラス。


viewName

protected String viewName
デフォルト以外のビュー技術(Velocity,バイナリデータ, PDF, Excel)を 利用する場合に設定するビュー名。


useRequestNameView

protected boolean useRequestNameView
ビュー名にリクエスト名を使用するか判断するフラグ。

trueを設定した場合、ビュー名にリクエスト名を設定する。

コンストラクタの詳細

TerasolunaController

public TerasolunaController()
メソッドの詳細

setCtxSupport

public void setCtxSupport(RequestContextSupport ctxSupport)
コンテキストを扱うサポートロジッククラスを設定する。

パラメータ:
ctxSupport - 制御情報を扱うサポートロジッククラス

setDataBinderCreator

public void setDataBinderCreator(ServletRequestDataBinderCreator dataBinderCreator)
DataBinder生成するクラスを設定する。

パラメータ:
dataBinderCreator - DataBinder生成するクラス

setViewName

public void setViewName(String viewName)
ビュー名を設定する。

パラメータ:
viewName - デフォルト以外のView技術を利用する場合に 設定するView名

setUseRequestNameView

public void setUseRequestNameView(boolean useRequestNameView)
ビュー名にリクエスト名を使用するか判断するフラグを設定する。

パラメータ:
useRequestNameView - ビュー名にリクエスト名を使用するか判断するフラグ。

afterPropertiesSet

public void afterPropertiesSet()
DIコンテナによってインスタンス化された直後に呼ばれるメソッド。 必須属性のNullチェックを行う。

定義:
インタフェース org.springframework.beans.factory.InitializingBean 内の afterPropertiesSet

getCommand

protected Object getCommand(javax.servlet.http.HttpServletRequest request)
                     throws Exception
リクエストの情報を格納するためのJavaBean(コマンド)を取得する。 型パラメータから実装コントローラに対応するJavaBean(コマンド)の型を判定し、 インスタンス化する。

オーバーライド:
クラス org.springframework.web.servlet.mvc.BaseCommandController 内の getCommand
パラメータ:
request - HTTPリクエスト
戻り値:
object 空のコマンドオブジェクト
例外:
Exception - 例外

getCommandType

protected Type getCommandType()
本クラスのサブクラス定義された、コマンドクラスの実タイプを取得する。

戻り値:
コマンドクラスのタイプ。

createBinder

protected org.springframework.web.bind.ServletRequestDataBinder createBinder(javax.servlet.http.HttpServletRequest request,
                                                                             Object command)
                                                                      throws Exception
リクエストの情報をJavaBean(コマンド)に格納するための データバインダを生成する。 bindAndValidateメソッドより呼び出される。

オーバーライド:
クラス org.springframework.web.servlet.mvc.BaseCommandController 内の createBinder
パラメータ:
request - HTTPリクエスト
command - バインドされるコマンドオブジェクト
戻り値:
生成されたデータバインダ
例外:
Exception - 例外

onBind

protected void onBind(javax.servlet.http.HttpServletRequest request,
                      Object command,
                      org.springframework.validation.BindException errors)
               throws Exception
リクエストの情報をJavaBean(コマンド)に格納した後に実行される処理。 バインド後、入力チェック処理前のタイミングで呼び出される。 バインド処理でエラー情報が格納された場合、 BindExceptionをスローする。

オーバーライド:
クラス org.springframework.web.servlet.mvc.BaseCommandController 内の onBind
パラメータ:
request - HTTPリクエスト
command - バインド済みのJavaBean(コマンド)
errors - バインド・入力チェックエラー保持クラス
例外:
Exception - 例外

onBindAndValidate

protected void onBindAndValidate(javax.servlet.http.HttpServletRequest request,
                                 Object command,
                                 org.springframework.validation.BindException errors)
                          throws Exception
入力チェックの後処理。 入力チェック処理後、業務ロジック実行前のタイミングで呼び出される。 入力チェック処理でエラー情報が格納された場合、 BindExceptionをスローする。

オーバーライド:
クラス org.springframework.web.servlet.mvc.BaseCommandController 内の onBindAndValidate
パラメータ:
request - HTTPリクエスト
command - バインド済みのコマンドオブジェクト
errors - バインド・入力チェックエラー保持クラス
例外:
Exception - 例外

handle

protected org.springframework.web.servlet.ModelAndView handle(javax.servlet.http.HttpServletRequest request,
                                                              javax.servlet.http.HttpServletResponse response,
                                                              Object command,
                                                              org.springframework.validation.BindException errors)
                                                       throws Exception
業務ロジック実行メソッドを呼び出し、モデルとビューを返却する。

定義:
クラス org.springframework.web.servlet.mvc.AbstractCommandController 内の handle
パラメータ:
request - HTTPリクエスト
response - HTTPレスポンス
command - コマンドオブジェクト
errors - バインド・入力チェックエラー保持クラス
戻り値:
モデルとビュー
例外:
Exception - 例外

executeService

protected R executeService(javax.servlet.http.HttpServletRequest request,
                           javax.servlet.http.HttpServletResponse response,
                           P command)
                    throws Exception
業務ロジックを実行する。

パラメータ:
request - HTTPリクエスト
response - HTTPレスポンス
command - コマンドオブジェクト
戻り値:
モデルオブジェクト
例外:
Exception - 例外

postService

protected void postService(javax.servlet.http.HttpServletRequest request,
                           javax.servlet.http.HttpServletResponse response,
                           P command,
                           R modelAndView)
                    throws Exception
業務ロジック実行後処理。 セッションスコープのリクエストに対応するための拡張点。 サブクラスにて必要に応じてオーバーライドすること。 業務ロジック処理にて例外が発生した場合は実行されない。

パラメータ:
request - HTTPリクエスト
response - HTTPレスポンス
command - コマンドオブジェクト
modelAndView - モデルとビュー
例外:
Exception - 例外

preService

protected void preService(javax.servlet.http.HttpServletRequest request,
                          javax.servlet.http.HttpServletResponse response,
                          P command)
                   throws Exception
業務ロジック実行前処理。 セッションスコープのリクエストに対応するための拡張点。 サブクラスにて必要に応じてオーバーライドすること。

パラメータ:
request - HTTPリクエスト
response - HTTPレスポンス
command - コマンドオブジェクト
例外:
Exception - 例外

executeService

protected abstract R executeService(P command)
                             throws Exception
業務開発者が実装すべき、業務ロジックの実行処理。

パラメータ:
command - コマンド(業務パラメータ)
戻り値:
モデル
例外:
Exception - 例外


Copyright © 2012. All Rights Reserved.