2007/05/05

[coldfusion]cfmoduleは、2度呼ばれる??

最近、知って、びっくりしたのですが、cfmoduleって2度呼ばれることがあるんですね。

例えば、

<CFMODULE TEMPLATE="hoge.cfm">



だと、cfmoduleは、一回しか、コールされないのですが、

<CFMODULE TEMPLATE="hoge.cfm">
</CFMODULE>

だと、なんと、hoge.cfmは、2回コールされるのです。

また、こう呼び出しても、2回コールされます。

<CFMODULE TEMPLATE="hoge.cfm" />

仮に、hoge.cfmの中身が下だったとします。

Hello ColdFusion<BR>

すると実行したとき、下のように表示されます。

Hello ColdFusion
Hello ColdFusion

ここで、cfmoduleが呼び出されたときに、hoge.cfm内のthisTag.ExecutionModeは、'start'になって、終了タグで呼び出された場合、thisTag.ExecutionModeの値は、'end'になります。

したがいまして、hoge.cfmが
Hello ColdFusion
<BR>
<CFIF thisTag.ExecutionMode is "start">
this tag is start!!<BR>
</CFIF>
<CFIF thisTag.ExecutionMode is "End">
this tag is end!!<BR>
</CFIF>

の場合、終了タグを使ったcfmoduleの呼び出し結果は、

Hello ColdFusion
this tag is start!!
Hello ColdFusion
this tag is end!!

となります。

ちなみに、呼び出し元が、

<CFMODULE TEMPLATE="hoge.cfm">
  foo
  <BR>
</CFMODULE>

となっていた場合、表示結果は、

Hello ColdFusion
this tag is start!!
foo
Hello ColdFusion
this tag is end!!

となります。

このことから、cfmoduleでは、一度、呼び出し先を処理して、それから、終了タグにいきつくまで、呼び出し元のcfmodule間の処理を行い、終了タグついた時に、再度、呼び出し先をコールするということなんですね。

0 コメント:

コメントを投稿