2009-06-16 22:58:29

【cflocation】現在のページの実行を停止し、指定したURLに移動

テーマ:ColdFusionのタグ
プログラムを強制的に違うページに移動する場合にcflocationタグを使います。

以下のようなプログラムがあります。


【Application.cfm】
01: <cfapplication name="test_cflocation_sys" sessionmanagement="yes"
02:                 sessionTimeout = "#CreateTimeSpan(1, 0, 0, 0)#">
03: 
04: <cffunction name="logMessage" returnType="void">
05:     <cfargument name="data" type="string">
06: 
07:     <cffile action="append"
08:         file="#GetDirectoryFromPath(GetCurrentTemplatePath())#log.txt"
09:         output="#arguments.data#">
10: </cffunction>


【test1.cfm】
01: <cfset LogMessage( "Pre-CFLocation" ) />
02: 
03: <cflocation url="page2.cfm" addtoken="false"/>
04: 
05: <cfset LogMessage( "Post-CFLocation" ) />


【page2.cfm】
01: <cfset LogMessage( "Target Page" ) />
02: 
03: <p>Target Page</p>


LogMessage関数はログを書き込みますが、以下のようになりました。
01: Pre-CFLocation
02: Target Page


cflocationは
「現在のページの実行を停止し、ColdFusion ページまたは HTML ファイルを開く」
ということで、「Post-CFLocation」は実行されません。


ひょっとするとページ全体の処理を行ってから、ページ移動したい場合があるかもしれません。
ページの最後にcflocationを使えばいいですが、cflocationを使わないパターンです。
それを実現したのが、以下のプログラムです。


【test2.cfm】
01: <cfset LogMessage( "Pre-CFLocation" ) />
02: 
03: <cfheader statuscode="302" statustext="Found"/>
04: 
05: <cfheader name="location" value="page2.cfm"/>
06: 
07: <cfflush />
08: 
09: <cfset LogMessage( "Post-CFLocation" ) />


この場合のログは、以下のようになります。
01: Pre-CFLocation
02: Post-CFLocation
03: Target Page


こんな方法もあります。


【test3.cfm】
01: <cfset LogMessage( "Pre-CFLocation" ) />
02: 
03: <cfset getPageContext().forward("page2.cfm")>
04: 
05: <cfset LogMessage( "Post-CFLocation" ) />


上記の処理は以下のようになります。
01: Pre-CFLocation
02: Target Page
03: Post-CFLocation
この場合だけブラウザのURLの表示がかわりませんでした。

以下のサイトを参考にしました。

    Performing ColdFusion Processing After A CFLocation Tag
    http://www.bennadel.com/blog/1550-Performing-ColdFusion-Processing-After-A-CFLocation-Tag.htm
    ※ここのサイトはほぼ毎日ColdFusionについて更新しています。

cflocationのドキュメントはこちらです(cf7)。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)

うたらぼさんの読者になろう

ブログの更新情報が受け取れて、アクセスが簡単になります

コメント

[コメントをする]

コメント投稿

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。