возврат на ту же страницу, если проверка не удалась в Grails - PullRequest
2 голосов
/ 21 марта 2012

Я выполняю некоторую проверку формы (используя плагин) в моем контроллере и устанавливаю логическую переменную с именем status =true/false, если проверка проходит / не проходит

эта проверка происходит в действии update, изапрос приходит от edit.gsp.Если проверка не пройдена, я хочу, чтобы элемент управления вернулся к edit.gsp.я могу добиться этого или мне нужно создать update.gsp отдельно и скопировать содержимое edit.gsp, чтобы показать отредактированные значения формы с сообщением об ошибке на странице update.gsp?Я хочу избежать передачи всех других параметров в бэкэнд и обратно только для проверки санации всего 1 поля.
Это должно выглядеть примерно так же, как javascript, но на самом деле проверка бэкэнда перенаправляет на ту же страницу при ошибке. Как мне этого добиться?При успешной проверке я делаю перенаправление на manageTemplate.gsp.

С уважением, Заранее спасибо

1 Ответ

3 голосов
/ 22 марта 2012

В зависимости от того, как вы запускаете проверку с помощью плагина, я думаю, что самый простой способ - написать собственный валидатор на вашем доменном объекте. Дополнительная информация: http://grails.org/doc/latest/ref/Constraints/validator.html

Если вы не хотите (или не можете) идти по этому маршруту, вы можете вручную проверить валидацию по плагину в вашем контроллере. В основном это будет тот же шаблон, который используют страницы / контроллеры Grails.

В вашем контроллере вы можете проверить с помощью своего плагина, и если экземпляр домена не подтвердит, вы перенаправите пользователя обратно к действию редактирования и добавите «params». Таким образом, все поля будут по-прежнему заполнены, как и прежде.

Обновленный фрагмент из контроллера Grails (для объекта домена с именем Tag):

    // ...
    // Code above here just gets the domain object to edit (tagInstance in this case)
    // and checks that the object hasn't be updated in the meantime

    tagInstance.properties = params

    // params have been applied to object, you can now do custom validation

    def status = extraValidationService.validate( tagInstance ) // or however you run the validation

    if ( !status ) {
       flash.message = "Did not pass custom validation"
       render(view: "edit", model: [tagInstance: tagInstance]) // Back to same edit page (field values maintained)
       return        
    }

    // Everything below here is unchanged

    if ( !tagInstance.save( flush: true, failOnError: false ) ) {
        render(view: "edit", model: [tagInstance: tagInstance])
        return
    }

    flash.message = message(code: 'default.updated.message', args: [message(code: 'tag.label', default: 'Tag'), tagInstance.id])
    redirect(action: "show", id: tagInstance.id) // This is where you redirect to the manageTemplate action.gsp

Это не даст вам подсветку проверки для полей, которые не прошли проверку. Чтобы получить это, вы можете либо использовать пользовательский метод проверки, либо вы можете (я этого никогда не делал) вручную 'сообщать' объекту домена, какие поля не прошли проверку и почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...