CFWheels:Form Helper单选按钮

时间:2015-12-16 03:46:49

标签: cfwheels

我正在使用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>

1 个答案:

答案 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");
}