CFWheels:表单助手单选按钮

CFWheels: Form Helper Radio Button

我正在使用 CFWheels 进行表单验证。我在两个对象模型中都有 presenseOf() 验证检查。我有一个带有文本框和一组单选按钮的表单。

但是,如果我提交的表单为空,则主管的验证有效,但用户清单的验证无效。它给出了错误;

"uchecklist" 未在 params 变量中定义。

进一步观察,我注意到当提交表单时,params struct 有 "supervisor[name]" 对象但它是空的,但它甚至没有 "uchecklist[cstatus]" 对象。此外,只有当我 select 一个单选按钮时, "uchecklist[cstatus]" 对象才会与该单选按钮的值一起提交。

我需要验证是否至少有一个单选按钮是 select,我想这个功能不同于空文本框验证。

谁能告诉我如何使用 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>

未选中的单选按钮不会向服务器提交任何数据。这不是 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");
}