我在 Coldfusion8 中有一个组件,它构造错误消息日志并将其传递给 JSON 中的一个变量,以供 Jquery 获取。
当用户更改语言(重新加载页面)时,我正在重建这个组件,如下所示:
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>
问题1:有没有更好的方法来做到这一点?从我的小 Coldfusion exp 中,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 按预期触发。很赶...