2008-01-01から1年間の記事一覧

LabelValueBean

のcollectionsにLabelValueBeanのリストを指定する。

ImageButtonBean

を使うとリクエストパラメタはIEの場合hoge.xとhoge.yが送られてくるらしい(Firefoxの場合hogeも送る)。なのでFormにString hogeってプロパティを作ってもリクエストパラメタがセットされないんだけど、hogeの型をこいつにしておけば無事セットされるとい…

ModuleConfigImpl

相当。 FormBeanConfigとかActionConfigとかForwardConfigはそのまま使わず、これを継承したサブクラスを使っている。使うサブクラスは設定できるようになっている。 ワイルドカードマッピング用の?ActionConfigMatcherを持っている。 …くらいか。

モジュールの切り替えってなに?

Action実行後にForwardしたりする場合、パスが"/"から始まっているので、そのままでは今いるモジュールにしかForwardできない。だから切り替えが必要になる、ってこと?

ActionConfig

タグに相当。 気になる機能はアクセス可能なロールを設定できる点くらいか。

ExceptionConfig

タグをインスタンス化したもの。 重要なのは継承の順番。自分がActionローカルのなら親定義をまずActionローカルから探し、次にから探す。自分がGlobalならからしか探さない。

FormPropertyConfig

タグをインスタンス化したもので、DynaActionFormのプロパティを設定するためにある。 どうでもいいが、reset属性には"post"とか、"post, get"とか指定できて、指定したメソッドのときのみリセットできる。使わないからどうでもいいけど。

BaseConfig

struts-configの各種タグをインスタンス化したもののベースになる。 主な機能はconfiguredがtrueだとimmutableになるとか、タグとかでセットされるプロパティを保持するとか、そいつの継承をするとか。

FormBeanConfig

struts-configのをインスタンス化したものだ。 このクラスで重要なのは、別のFormBeanConfigを継承可能という点とActionFormインスタンスを取得できる点。…MutableDynaClassの使いどころって?

org.apache.struts.action.ExceptionHandler

まずActionForwardを作成する。ExceptionConfigにpathが設定されていればそれで、設定されていなければActionMappingのinput属性を使用する。 次に例外をリクエストに登録するとともに、例外のメッセージをExceptionConfigのscope属性に応じたスコープに登録…

org.apache.struts.chain.commands.servlet.ExceptionHandler

ActionConfigまたはModuleConfigから発生した例外をどう処理するかを設定したExceptionConfigを探す。ExceptionConfigが見つからなければ例外をそのまま投げる。 ExceptionConfigが見つかったらそこに設定されているorg.apache.struts.action.ExceptionHandl…

ExceptionCatcher

postprocessのときに威力を発揮するFilter。 process中に発生した例外を例外処理チェーンに引渡す。 こいつのpostprocessの戻り値はtrueなので、こいつを通ると呼び出し元には必ずprocess中に発生した例外が投げられないようになるんですけど… ぬるぽとかで…

LookupCommand

name属性に指定したcommandなりchainなりを探して実行。 チェーンAの中からチェーンBを呼びたい、ってなときに使うんだと思う。

PerformForward

ここまでに取得したForwardConfigのpath属性に従って遷移します。path属性がエイリアスだった場合の実際のパスの解決、タグのforwardPatternに従ったパスの解決をして、Include、Redirect、Forwardに応じて遷移します。 Includeの時の条件、 response.isComm…

RequestUtils#forwardURL()

のforwardPattern属性で指定したパターンに従ってコンテキスト相対パスを返します。のmoduleが"hoge"、pathが"fuga.html"、のforwardPatternが"/$M/$P"だったら"/hoge/fuga.html"になる。 タグのcontextRelative属性がtrueならpath属性をそのままコンテキス…

ModuleUtils.getModuleConfig()

オーバーロードされたメソッドがいっぱいあるが、要はこういうこと。 1.引数のprefixと同じ名前のモジュールをServletContextから取得する。 2.prefixが指定されていない、あるいは引数にServletContextがない場合はHttpServletRequestから現在のモジュ…

RequestUtils#actionIdURL()

actionIdURL()は引数のURLがActionのエイリアスだった場合、実際のActionのパスを取得するためのメソッド。エイリアスはのactionId属性で指定する。引数のURLが"http"または"/"で始まる場合はエイリアスとはみなされない。 ForwardConfigを引数に取る方のメ…

WebActionContext

WebContextのラッパーという位置づけだと思われる。WebActionContextクラスはabstractではないが、ServletActionContextに継承されてナンボのものではないだろうか(WebContextクラスはabstractだし、PortletAtionContextとかないし)。ラッパー以外の昨日と…

ServletActionContext

strutsのComposableRequestProcessorが処理するチェーンに利用する。 ServletActionContextはServletWebContextのラッパーという位置づけだと思われる。ServletWebContextにはPortletWebContextとFacesWebContextという兄弟がおり、彼らの親はWebContextであ…

Contextの系譜

commons-chainのContextインターフェースの系譜もなんだかややこしい。ざっくり言って次の2通りの系譜がある。 1.Context 2.Context 1.の系譜がcommons-chainが提供するもので、2.の系譜はstrutsが提供するもの。途中にContextWrapperがあることから…

ServletContext

ServletContextはWebアプリケーション1個の設定を表しているらしい。後述するServletActionContextやServletWebContexstなんかはcommons-chainのContextを実装しているが、ServletContextはそれとは全く関係ない、Webアプリケーションを表すためだけのインタ…

ExecuteForwardCommand

ActionContextに格納されたForwardConfigがcommand属性(とcatalog属性)を持っていたらそれを実行。 前に出てきたExecuteCommandを継承して作っているのがちょっとおもしろい。

ExecuteAction

Actionを実行する。Validationに引っかかった場合、Actionクラスを用意できなかった場合は何もしない。Actionを実行したらActionContextに戻り値のForwardConfigをセットして次へ。

contextClassLoaderって?

よくわからないのだけれども。 同じスレッド(またはコンテキスト・文脈)の中では同じクラスローダーを使ってクラスをロードして欲しいことがある。たとえばHotDeploy中はHotDeployClassLoaderにクラスをロードして欲しいだろう。そんなときに Class.class.…

CreateAction

Validationに失敗していいなければ、typeActionを作成、キャッシュする。typeもforwardもincludeも設定していない場合、ログにエラーが表示される。 キャッシュはApplicationスコープにModule(struts-config.xml相当?)ごとに保持される。 Actionの生成は…

PerformInclude

ここまででActionContextにincludeが設定されていれば、includeに設定されたServletやJSPなどに処理を渡す(Actionが実行されない)。実態はforward。「include」って名前がまぎらわしい…。 処理を渡した場合、チェーンはここで終了。 includeには絶対パス、…

SelectForward

にforwardを設定した場合、そこからForwardConfigを作成してActionContextにセットする。forwardはコンテキスト相対パス。例によってValidationにひっかかったばあいは実行しない。 なおでforwardまたはincludeを設定した場合、type属性に指定したActionはイ…

ExecuteCommand

タグに設定したcommandを実行する。設定していなければ何もしない。

ExecuteCommand

Validationに引っかかっていなければ、Actionを実行するためのチェーンを探して実行します。 チェーン名はActionConfig.commandに格納されているらしいけど…? 例のごとくカタログ名、コマンド名で取得。

SelectInclude

にinclude属性が指定されていた場合、その値をActionContextにセットします。 includeはRequestDispatcher.include()によって呼び出されるJSP等のコンテキスト相対パスです。