我在Coldfusion8中有一个组件,它构造了一个错误消息的日志并将它传递给JSON中的一个变量,以供Jquery使用。如何在Coldfusion中仅调用一次cf函数和用户触发器?
当用户更改语言(重新加载页面)一样,所以我重建这个组件:
HTML:
<a href="index.cfm?lang=EN">change to english</a>
在我检查郎重装和如果指定在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 exp,CFINVOKE创建并丢弃对象,所以这应该是资源友好。
Question2:
如何在应用程序/会话启动时运行此操作?我尝试从我的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:
好的。我通过here发现问题。当我更改我的应用程序名称时,我发现什么不起作用,修复此问题后,onSessionStart按预期启动。相当多的...
不要忘记var范围和验证变量。根据你的代码,我可以很容易地将任何东西注入会话变量。 –
hm。你知道一个好的链接让我开始? – frequent