Grails и AJAX: проверка формы Grails работает с использованием ModalBox или YUI2 Dialog? - PullRequest
0 голосов
/ 11 июля 2010

Некоторые приложения Grails, например, то, что я пишу, требуют представления / user и / admin, которые являются «панелями мониторинга», в основном пользователь или администратор попадают на эту страницу, возможно, после успешного входа в систему и всех таблиц данных и там есть вкладки, поэтому им вряд ли когда-нибудь понадобится переходить с этой страницы, обеспечивая пользователям более приятный опыт, к которому привыкли пользователи Gmail или Mint.

Чтобы разрешить поиск и формировать сообщения с главной / пользовательской панели инструментов, я использовал плагин modalbox v0.4 grails install modalbox. Очевидно, что Modalbox сам управляет GET / POST и, к сожалению, теряет 99% проверок, которые дает типичный блок ограничений.

Обходите это сейчас, заменив g: submitButton, добавив немного базового JavaScript в submit, как показано. (Это ужасный обходной путь, конечно.)

<input type="button" name="create" class="save" onclick="if (!(document.getElementById('name').value === '' || document.getElementById('summary').value === '')) { document.forms[0].submit(); }" value="Create" />

Но должен быть лучший способ! Мне сказали использовать g: remoteForm, но я не видел достаточно полного примера для работы с Modalbox. Может быть, люди используют новое окно, которое автоматически закрывается на пару секунд, как окно создания Gmail?

Скорее всего, это настолько распространенный сценарий, что он подходит для шаблона SiteMesh или, по крайней мере, для шаблона визуализации: или даже для тега GSP, такого как modalBox: createLink.

Источник доступен здесь в пространстве проекта Gtown.

1 Ответ

1 голос
/ 13 июля 2010

В примере на Modalbox ошибка проверки уже скрыта в лайтбоксе:Неверный адрес электронной почты!

поэтому я думаю, что если вы хотите использовать проверку Grails, вам придется самостоятельно контролировать форму.В этом случае плагин лайтбокса будет отвечать только за рисование лайтбокса, а вы предоставите все содержимое формы.

Я использую Boxy (еще один плагин лайтбокса, который должен работать аналогично вашему Modalbox), и вот примеркак я использую валидацию Grails в лайтбоксе.Когда я создаю лайтбокс, я использую действие «shell», чтобы заполнить его.Действие оболочки отображает шаблон, а внутри шаблона находитсякоторый рисует форму поиска в первый раз.вызывает действие проверки и перерисовывает содержимое лайтбокса с результатами действия проверки.Результатами могут быть либо страница успеха, либо страница ошибки проверки.

Использование объекта команды, в данном примере SearchCommand, только для демонстрации.

Контроллер:

def launchLightbox = {
    render template: 'lightboxFrame'
}

def lightboxContents = { SearchCommand cmd ->

    // if the search failed, re-draw the search form with validation errors
    if (cmd.hasErrors()) {
        return [cmd: cmd]
    } 

    // the search succeeded. Show the results within the lightbox
    else {
        render template: 'searchResults', model: [results: cmd.results]
    }
}

_lightboxFrame.gsp:

<g:formRemote name="searchLightbox" 
        url="[action: 'lightboxContents']" update="lightboxContentsDiv">
    <div id="lightboxContentsDiv">
        <g:include view="/yourController/_lightboxContents.gsp"/>
    </div>
</g:formRemote>

_lightboxContents.gsp:

<g:renderErrors bean="${cmd}"/>
<p>Enter your search:</p>
<g:textField name="search" value="${cmd?.search}"/>
<g:submitButton name="submitButton" value="Submit"/>

Если вы хотите больше контроля над тем, чтоЧтобы выполнить поиск в случае успешного или неудачного поиска, например, для отображения ошибок проверки при сбое или закрытия лайтбокса при успехе, вам, вероятно, потребуется написать собственный обратный вызов javascript.

Отчасти это связано с этой проблемой,и это может быть полезно для вас, это плагин Grails Remote Constraints .Я не пробовал это некоторое время, но вы должны иметь возможность использовать его для асинхронной перерисовки частей вашей страницы с ошибками проверки, генерируемыми Grails.

...