Coldfusion服务器端无线电验证

时间:2013-10-18 21:28:17

标签: validation coldfusion

我正在尝试验证是否已在ColdFusion中通过服务器端选择了一个单选按钮。如果为空,则文本输入错误输出,但是,如果未选择任何单选按钮组,则单选按钮组不会触发错误。我似乎无法找到任何关于此的文档。

  <cfform name="mobile_device_request" id="form" action="">
      Text Box:
      <cfinput type="Text" name="subscriber" message="Please enter in a subscriber" required="yes" validateat="onserver">

      Subscriber:
      <cfinput type="Radio" name="service_provider" value="AT&amp;T" required="yes" validateat="onserver"><span class="label">AT&amp;T</span>
      <cfinput type="Radio" name="service_provider" value="Sprint" required="yes" validateat="onserver"><span class="label">Sprint</span>
      <cfinput type="Radio" name="service_provider" value="Verizon" required="yes" validateat="onserver"><span class="label">Verizon</span>

1 个答案:

答案 0 :(得分:2)

<强>解释

要回答你的问题,虽然我从未使用过该功能,但我会说这是一个错误。

根据documentation onServer验证工作,自动附加具有特殊命名约定的隐藏表单字段。然后,CF服务器检查certain patterns in form field names的所有请求,例如以_required_cfformrequired结尾的请求,如果找到,则在相关字段上执行验证。

如果您查看cfform的来源,请注意CF已添加了几个隐藏字段:

<input type='hidden' name='subscriber_CFFORMREQUIRED' value='Please enter in a subscriber'>
<input type='hidden' name='service_provider_CFFORMREQUIRED' value='Error in service_provider text.'>
<input type='hidden' name='service_provider_CFFORMREQUIRED' value='Error in service_provider text.'>
<input type='hidden' name='service_provider_CFFORMREQUIRED' value='Error in service_provider text.'>

那些应该触发两个字段的CF服务器端验证。但是,正如您发现它只适用于文本字段,而不适用于单选按钮。虽然奇怪的是,如果您手动添加以_required结尾的隐藏字段,它会正常工作:

    <input type="hidden" name="service_provider_required" 
         value='You forgot to select a service_provider'>

<强>答案:

同样,我认为您所看到的行为可能是一个错误。坦率地说,有许多cfform之一。就个人而言,我建议放弃cfform/cfinput。使用普通的html输入并编写自己的验证。由于它是一个单选按钮,因此只有在选中其中一个按钮时才会定义该字段。所以你可以测试该字段的存在:

    <cfif NOT structKeyExists(FORM, "service_provider")>
        no service_provider selected. do something
    </cfif>

...或者指定一个默认值,并测试该值:

    <!--- default to empty string --->
    <cfparam name="FORM.service_provider" default="">
    <cfif NOT len(FORM.service_provider)>
        no service_provider selected. do something
    </cfif>