Coldfusion cfparam';d变量是否未定义?
许多源通常通过Coldfusion cfparam';d变量是否未定义?,coldfusion,Coldfusion,许多源通常通过调用单个资源,但有些源使用 理想情况下,代码查找变量previous\u state。如果传递了一些变体,则资源将尝试使用它们 我收到了这个错误: 变量PREVIOUS_状态未定义 行记录指向这段代码中的 <cfparam name= "previous_state" default= "" /> <cfif isSimpleValue( previous_state ) and len( pr
调用单个资源,但有些源使用
理想情况下,代码查找变量previous\u state
。如果传递了一些变体,则资源将尝试使用它们
我收到了这个错误:
变量PREVIOUS_状态未定义
行记录指向这段代码中的
<cfparam name= "previous_state"
default= "" />
<cfif isSimpleValue( previous_state )
and len( previous_state ) eq 0>
<cfset previous_state= previousState />
</cfif>
我现在认为,
cfparam
正在尝试使用一个在代码执行时已不存在的范围。请确保正确定义变量的范围,并且上面的示例中有一个输入错误。在ACF9.0.1和Railo3.3.1.000上运行此代码没有问题
<cfparam name= "previous_state"
default= "" />
<cfdump var="#previous_state#">
要使前一个_状态未定义,它需要为null。你需要像这样做
<cfif isNull(previous_state)>true</cfif>
true
要证明这一点,请尝试以下方法
<cfset previous_state = "" />
<!--- Change to set previous_state --->
<cfset previous_state = javacast( "null", previous_state ) />
<cfparam name="previous_state" default="" />
<cfif isSimpleValue( previous_state ) and len( previous_state ) eq 0 >
<cfset previous_state = previousState />
</cfif>
由于代码在CFTHREAD标记中,所以您应该将
上一个状态作为CFTHREAD属性传递,例如:
<cfparam name="previous_state" default="" />
<CFTHREAD previous_state = previous_state
previousState= "#local.previous_state#">
<cfif isSimpleValue( ATTRIBUTES.previous_state ) ........
</CFTHREAD>
我在CF8上使用该示例获得了成功的执行。上面的代码是在CTHREAD标记中定义的吗?是的。这看起来像是线程中的范围问题。肯定是范围问题。我对cfthread的处理还不够,但我认为previous_状态应该在attributes范围内(attribute.previous_state)。为什么previous_状态首先被定义为cfthread中的参数?您是否希望将上一个_状态作为URL/FORM参数传递到执行页面?如果是这样的话,那么在CFTHREAD之外定义它,并将其作为一个附加属性进行传递。我期待前面的_状态,但不是所有调用都传递它。例如,最后一个代码段将传递previousState。我之所以选择previousState,是因为如果传递previousState,我可以设置它的值。我开始认为这是一个线程范围问题。正在跟踪完整的执行路径。。。
<cfparam name="previous_state" default="" />
<CFTHREAD previous_state = previous_state
previousState= "#local.previous_state#">
<cfif isSimpleValue( ATTRIBUTES.previous_state ) ........
</CFTHREAD>