Validation Coldfusion服务器端无线电验证

Validation Coldfusion服务器端无线电验证,validation,coldfusion,Validation,Coldfusion,我试图验证是否在ColdFusion中通过服务器端选择了单选按钮。如果文本输入为空,则会出错。但是,如果未选择任何选项,则单选按钮组不会触发错误。我似乎找不到这方面的任何文件 <cfform name="mobile_device_request" id="form" action=""> Text Box: <cfinput type="Text" name="subscriber" message="Please enter in a subsc

我试图验证是否在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>

文本框:
用户:
美国电话电报公司;T
冲刺
威瑞森

说明:

为了回答您的问题,虽然我从未使用过该功能,但我会说它是一个bug

根据服务器上的
onServer
,验证通过自动附加带有特殊命名约定的隐藏表单字段来工作。然后,CF服务器检查所有请求,例如以
\u required
\u 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.'>
回答:

同样,我认为您看到的行为可能是一个bug。坦白地说,许多人中有一个使用了
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>

未选择任何服务提供商。做点什么

检查form.service\u提供程序是否存在,请停止使用cfform和cfinput Error*HTML5涵盖了cfform@Wes不。始终确定变量的范围。这不是一个好建议。HTML5也不是服务器端验证,而是客户端验证。
\u required
的问题在于它们会在响应页面上导致硬错误。如果“硬错误”,您的意思是CF显示服务器端错误页面-这正是应该发生的。另外,为了澄清,我建议不要使用
cfinput
\u required
。而是使用普通输入字段并编写自己的验证,如上面的示例所示。
    <!--- default to empty string --->
    <cfparam name="FORM.service_provider" default="">
    <cfif NOT len(FORM.service_provider)>
        no service_provider selected. do something
    </cfif>