我正在使用CFWheels进行表单验证。我在两个对象模型中都有presenseOf()验证检查。我有一个带有文本框和一组单选按钮的表单。
但是,如果我将表单提交为空,则对主管的验证有效,但对用户核对表的验证不起作用。它给出了错误;
“uchecklist”未在params变量中定义。
进一步观察,我注意到提交表单时,params struct有“supervisor [name]”对象但它是空的,但它甚至没有“uchecklist [cstatus]”对象。此外,只有当我选择其中一个单选按钮时,才会使用该单选按钮的值提交“uchecklist [cstatus]”对象。
我需要验证是否至少有一个单选按钮被选中,我的访客此功能与空文本框验证不同。
有人可以告诉我如何使用CFWheels表单帮助程序验证单选按钮。
控制器
public function t_validate()
{
title = "Home";
supervisor = model("supervisors");
uchecklist = model("user_checklist");
}
public function t_validate_complete()
{
title = "Home";
supervisor = model("supervisors").new(params.supervisor);
supervisor.save();
uchecklist = model("user_checklist").new(params.uchecklist);
uchecklist.save();
renderPage(action="t_validate");
}
查看
<cfoutput>
<cfdump var="#params#">
#errorMessagesFor("supervisor")#
#startFormTag(action="t_validate_complete")#
<div>
<label for="">Supervisor:</label>
<input name="supervisor[name]" value="" />
</div>
<fieldset>
<input type="radio" name="uchecklist[cstatus]" value="1" />
<label for="profile-eyeColorId-2">Blue</label><br />
<input type="radio" name="uchecklist[cstatus]" value="2" />
<label for="profile-eyeColorId-1">Brown</label><br />
<input type="radio" name="uchecklist[cstatus]" value="3" />
<label for="profile-eyeColorId-3">Hazel</label><br />
</fieldset>
<div>
<input type="submit" value="Save Changes" />
</div>
#endFormTag()#
</cfoutput>
答案 0 :(得分:0)
未经检查的单选按钮将不向服务器提交任何数据。这对ColdFusion或CFWheels来说不是一个独特的问题。
要修复,请在控制器操作开始时为结构提供默认值:
public function t_validate_complete()
{
// Provides an empty struct for the model to consume if none of the radio buttons are checked.
param name="params.uchecklist" type="struct" default="#StructNew()#";
title = "Home";
supervisor = model("supervisors").new(params.supervisor);
supervisor.save();
uchecklist = model("user_checklist").new(params.uchecklist);
uchecklist.save();
renderPage(action="t_validate");
}