我有一个数据库表,它是一个定义术语的字典——键、值。我想从数据库中加载应用程序范围内的字典,并将其保留在那里以提高性能(它不会改变)。
我认为这可能是某种“结构”,但我对 ColdFusion非常陌生(帮助另一个团队)。
然后,我想对一些输出到浏览器的字符串做一些简单的字符串替换,循环遍历定义的术语并用一些 HTML 替换这些术语来定义术语(悬停或链接,稍后会制定详细信息, 不重要)。
这是当前在 application.cfc 文件中的代码:
<cffunction name="onApplicationStart">
<cfquery name="qryDefinedTerms" datasource="mydsn">
SELECT term, definition FROM definedterms
</cfquery>
<cfset application.definedterms = Array(1)>
<cfloop query="qryDefinedTerms">
<cfset myHash = structNew()>
<cfset myHash.put("term", qryDefinedTerms.term)>
<cfset myHash.put("definition", qryDefinedTerms.definition)>
<cfset ArrayAppend(application.definedterms, myHash)>
</cfloop>
</cffunction>
调用页面尝试按如下方式使用它:
function ReplaceDefinitions(inputstring) {
for (thisdef = 1 ;
thisdef LTE ArrayLen(application.definedterms);
thisdef = (thisdef+1)) {
inputstring = Replace(inputstring,
application.definedterms(thisdef).term,
application.definedterms(thisdef).definition, "ALL");
}
return inputstring;
}
当我调用该函数时,我返回:“元素 DEFINEDTERMS 在应用程序中未定义”。
编辑:强制调用 OnApplicationStart() 有效,显然 Cold Fusion 的 application.cfc 不像 ASP.NET 的 web.config,更改它不会重置应用程序。