我是ColdFusion的新手,我遇到了一些未检查数字的GET参数的遗留代码。我正在尝试添加类似的代码:
<cfparam name="URL.count"
default="5"
min="1" max="9999"
type="range">
这样任何人都无法添加50,000或-1之类的任意值。我想,如果ColdFusion超出该范围,它将使用指定的默认值,但它似乎抛出异常并仅在未指定任何内容时使用默认值。
我可以尝试/捕获异常,但我想知道,因为我是新手,如果在ColdFusion中没有更好的练习来处理这样的情况。也许还有另一个我不知道的ColdFusion标签 - 那种事情。
答案 0 :(得分:1)
在ColdFusion中处理此问题的做法与任何语言相同 - if / else。
if (url.count <= 99999) {
code for good count
}
else {
code for bad count
}
现在,因为这是一个url变量,所以你可能也可以控制它。如果它来自表单方法=&#34; get&#34;,您可以添加一些客户端验证来扩充,而不是替换上面显示的服务器端验证。
同样,如果它来自您生成的锚标记或cflocation标记,您可以在生成该代码时执行某些操作以防止出现这种情况。
答案 1 :(得分:1)
CFPARAM仅用于设置变量的默认值(如果尚未定义)。虽然它可以用于验证变量的数据类型,但它不能执行与值相关的条件逻辑。你必须手动完成。
<cfparam name="URL.count" type="numeric" default="5">
<cfif (url.count LT 1) OR (url.count GT 9999)>
<cfthrow type="error" message="The current count (#url.count#) is outside of the allowed range.">
</cfif>
答案 2 :(得分:1)
结合Min和Max,就像这样。我比较啰嗦,但我认为这只会让人感到困惑。 (最小值介于...和之间)
Min(Max(lower_boundary,currentnumber),upperBoundary)
作为一个功能,更具可读性,
<cfscript>
numeric function uForceRange(required numeric cNum, required numeric lNum, required numeric hNum) {
return Min(Max(arguments.lNum,arguments.cNum),arguments.hNum);
}
</cfscript>
<cfoutput><pre>Between 1 and 10:
7: #uForceRange(7,1,10)#
0: #uForceRange(0,1,10)#
42: #uForceRange(42,1,10)#
10.4: #uForceRange(10.4,1,10)#</pre></cfoutput>
这个简单的功能当然可以用任何语言轻松实现。