如何避免评估()

时间:2015-11-25 16:02:59

标签: coldfusion

如何编写

的等价物
<cfset lang = Evaluate("SERVER.Locale.#LocaleName#.#SESSION.Locale#")>

,不使用评估。

我试过像

这样的东西
<cfset lang = SERVER[Locale][#LocaleName#][#SESSION.Locale#]>

在引用this后,但它无效。

更新

<cfset localename = "test">
<cfset session.locale = "en">
<cfif Not IsDefined("SERVER.LOCALE")>
    <cfset SERVER.Locale = StructNew()>
</cfif>

<cfif IsDefined("SERVER.Locale.#LocaleName#")>
    <cfset StructDelete(SERVER.Locale, "#LocaleName#")>
</cfif>
<cfset "SERVER.Locale.#LocaleName#" = StructNew()>
<!---<cfset lang = Evaluate("SERVER.Locale.#LocaleName#.#SESSION.Locale#")>--->
<!---<cfset lang = SERVER["Locale.#LocaleName#.#SESSION.Locale#"]>--->
<cfset lang = SERVER.Locale[LocaleName][SESSION.Locale]>
<cfoutput>#lang#</cfoutput>

错误:

元素en在作为表达式一部分引用的CFML结构中未定义。

1 个答案:

答案 0 :(得分:11)

此:

<cfset lang = Evaluate("SERVER.Locale.#LocaleName#.#SESSION.Locale#")>

应修改为:

<cfset lang = SERVER.Locale[LocaleName][SESSION.Locale]>

您不应该将[Locale]放在方括号中。

我认为错误信息(你应该总是用你的问题发帖)可能实际上解释了你,dunnit?