Grails: вложенные объекты команды

Используя простой HTML ванили и javascript

<input type='text' id='txtMyInputBox' />


<script language='javascript' type='text/javascript'>
function SetFocus()
{
    // safety check, make sure its a post 1999 browser
    if (!document.getElementById)
    {
        return;
    }

    var txtMyInputBoxElement = document.getElementById("txtMyInputBox");

    if (txtMyInputBoxElement != null)
    {
        txtMyInputBoxElement.focus();
    }
}
SetFocus();
</script>

Для тех, которые там используют .net платформу и asp.net 2.0 или выше, его тривиальное. При использовании более старых версий платформы необходимо было бы записать некоторый JavaScript, подобный вышеупомянутому.

В Вашем обработчике OnLoad (обычно page_load при использовании шаблона страницы запаса, предоставленного Visual Studio) можно использовать:

C#

protected void PageLoad(object sender, EventArgs e)
{
    Page.SetFocus(txtMyInputBox);
}

VB.NET

Protected Sub PageLoad(sender as Object, e as EventArgs)

    Page.SetFocus(txtMyInputBox)

End Sub

(* Примечание я удалил символ подчеркивания из имени функции, которое является обычно Page_Load с тех пор в блоке кода, который это отказалось представлять правильно! Я не видел в документации разметки, как заставить подчеркивания представлять незавершенный.)

Hope это помогает.

9
задан Jay P. 13 March 2012 в 06:17
поделиться

2 ответа

Я добился этого, выполнив следующие действия:

Сделайте внутренний командный объект доступным для проверки, поскольку он не создается, как обычный командный объект. Есть два способа сделать это: с помощью аннотации @ org.codehaus.groovy.grails.validation.Validateable или с помощью параметра конфигурации grails grails.validateable. классы

Добавление настраиваемого валидатора для innerCommands в OuterCommand

static constraints = {
    innerCommands(validator: {val, obj ->
        // 'attributes.validation.failed' is the key for the message that will
        // be shown if validation of innerCommands fails
        return val.every { it.validate() } ?: ['attributes.validation.failed'] 
    })
}
8
ответ дан 4 December 2019 в 22:28
поделиться

Я не думаю, что объекты домена в команде или вложенных командах проверяются по умолчанию, вам нужно будет написать валидатор , который зацикливается с помощью внутренних команд и проверяет их все.

static constraints = {
    innerCommands(validator:{val,obj ->
        //validate and merge errors from each innerCommand
    })
}

Вероятно, вам придется обработать объект Errors и объединить все результаты вместе, но это не так уж сложно.

0
ответ дан 4 December 2019 в 22:28
поделиться