CFWheels: радиокнопка помощника по формам

Я использую CFWheels для проверки формы. У меня есть проверки presenseOf() в обеих моделях объектов. У меня есть форма с текстовым полем и набором переключателей.

Однако, если я отправляю пустую форму, проверка для руководителя работает, но проверка для контрольного списка пользователя не работает. Это дает ошибку;

«uchecklist» не определен в переменной params.

При дальнейшем наблюдении я замечаю, что при отправке формы структура params имеет объект «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>

person Saad A    schedule 16.12.2015    source источник


Ответы (1)


Неотмеченная радиокнопка не будет отправлять данные на сервер. Это не уникальная проблема для 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");
}
person Chris Peters    schedule 16.12.2015