2009年5月20日水曜日

Struts応用(七):独自のActionMappingの拡張(3)

3.Actionクラスのexecute()メソッドに、パラメータ
mappingを明示的に上記ActionMappingサブクラスに変換すること
が必要
例:
public class HelloAction extends Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {

// ロギング部分
// LoggingActionMappingへ明示的に型キャストする必要がある
((LoggingActionMapping) mapping).writeLog(request,
"にリクエストする。", LoggingActionMapping.INFO);

return mapping.findForward("success");
}
}

Struts応用(七):独自のActionMappingの拡張(2)

2.struts-config.xmlに上記ActionMappingクラスの登録
★ソースを参照する時、(を<に変更、)を>に変更

①ActionMappingサブクラスの登録
2つの方法があります
・全てのactionに対して、該当ActionMappingサブクラスを応用:
(action-mappings)タグに下記のように、独自のActionMappingクラス
を該当タグのtype属性に追加:
(action-mappings type="{packagename}.LoggingActionMapping")
・特定なactionだけに対して、該当ActionMappingサブクラスを応用:
(action path="/hello"
className="{packagename}.LoggingActionMapping"
type="qjb.struts.pkgOne.HelloAction")
......
(/action)
②ActionMappingサブクラスに独自のプロパティを渡す
各(action)要素内に(set-property)子要素を記述し、
そのproperty属性にプロパティ名、value属性に値を指定
例:
  (action path="/hello"
type="qjb.struts.pkgOne.HelloAction")
(set-property property="logLevel" value="2"/)
(set-property property="logFilePath" value="c:\struts_log.txt"/)
(forward name="success" path="/hello.jsp"/)
(/action)

Struts応用(七):独自のActionMappingの拡張(1)

ActionMappingクラスの拡張:
簡単にいえば、ActionMappingクラスのサブクラスを実装する
こと下記で例を用いて、手順を説明します。
例としての仕様要求:
下記の独自のロギング機能の実装が必要
・特定のログファイルへログを出力するメッソドを持ち
・Actionクラスの呼び出しによって、ログを出力
・パラメーラlogLevelによって、ログ出力レベルを設定できる
・パラメータlogLevelの初期化は、struts-config.xmlで実施
・パラメータlogFilePathによって、ログファイルパスを設定
・パラメータlogFilePathの初期化は、struts-config.xmlで実施

拡張の実施手順:
1.ActionMappingクラスのサブクラスを作成
①変数logLevelとsetLogLevel、getLogLevelメソッドの定義
②変数logFilePathとsetLogFilePath、getLogFilePathメソッドの定義
③デフォルトのログファイルパスを定数として定義
④ログ出力メソッドの定義
⑤ログレベルとして、レベルごとの定数フラグを定義
(例:private static final int info=2;)