エラー メッセージのログを作成し、それを JSON の変数に渡して Jquery で取得するコンポーネントが Coldfusion8 にあります。
ユーザーが言語を変更する (ページをリロードする) と、次のようにこのコンポーネントを再構築します。
HTML:
<a href="index.cfm?lang=EN">change to english</a>
リロードでlangをチェックしています。指定されている場合は、Coldfusion でこれを実行しています。
<cfif isdefined("lang")>
<cfset Session.lang= #lang#>
<!--- rebuild error messages --->
<cfinvoke component="services.errorMsg"
method="createErrMsgsLog"
returnvariable="errMsgs">
</cfinvoke>
<cfoutput><script type="text/javascript">var errorLog = '<cfoutput>#errMsgs#</cfoutput>';</script></cfoutput>
</cfif>
Question1 : これを行うためのより良い方法はありますか? 私の小さな Coldfusion の経験から、CFINVOKE はオブジェクトを作成および破棄するので、これはリソースに優しいはずです。
質問2 :
アプリケーション/セッションの開始時にこれを実行するにはどうすればよいですか? application.cfc onSessionStartから実行しようとしましたが、そこから Javascript アラート/コンソールをトリガーできないため、何も起こらないのではないかと心配しています...また、application.cfc にこのような関数を貼り付けるよりも良い方法があるはずです。
いくつかの洞察をありがとう!
編集:
途中で:言語を変更すると、これを起動できます:
<cfif isdefined("Sprachwechsel")>
<cfset Session.Sprache = #Sprachwechsel#>
<cfinvoke component="services.errorMsg" method="createErrMsgsLog" returnvariable="Session.errMsgs">
</cfinvoke>
<cfoutput>
<script type="text/javascript">var errorLog = '<cfoutput>#Session.errMsgs#</cfoutput>'</script>
</cfoutput>
ただし、これも application.cfc から一度起動したいと考えています。同じコードまたは以下のコードを使用できます。何も起こりません。
<cffunction name="onApplicationStart" returnType="boolean" output="false">
<cfscript>
APPLICATION.strObjs = structNew();
APPLICATION.strObjs.objErrMsg = createObject("component","services.errorMsg");
</cfscript>
<cfreturn true />
</cffunction>
<cffunction name="onSessionStart" returnType="void" output="false">
<cfscript>
Session.sprache = "DE";
Session.errMsgs = APPLICATION.strObjs.objErrMsg.createErrMsgsLog();
</cfscript>
<cfreturn true />
</cffunction>
無数のバリエーションを試しましたが、実際のページで確認すると、 Session.errMsgsは未定義のままです。私が見逃しているものは何か分かりますか?
EDIT2:
わかりました。ここまで読んで問題が見つかりました。アプリケーション名を変更したとき、何が機能していないかを確認し、これを修正した後、onSessionStart が期待どおりに起動しました。なかなかの乗り物…