检查ColdFusion范围的简便方法,如果超出该范围,则选择一个值

时间:2014-06-16 16:26:28

标签: coldfusion coldfusion-10

我是ColdFusion的新手,我遇到了一些未检查数字的GET参数的遗留代码。我正在尝试添加类似的代码:

<cfparam name="URL.count" 
           default="5" 
           min="1" max="9999"
           type="range">

这样任何人都无法添加50,000或-1之类的任意值。我想,如果ColdFusion超出该范围,它将使用指定的默认值,但它似乎抛出异常并仅在未指定任何内容时使用默认值。

我可以尝试/捕获异常,但我想知道,因为我是新手,如果在ColdFusion中没有更好的练习来处理这样的情况。也许还有另一个我不知道的ColdFusion标签 - 那种事情。

3 个答案:

答案 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>

这个简单的功能当然可以用任何语言轻松实现。