Как отобразить результаты проверки в веб-потоке Grails? - PullRequest
1 голос
/ 21 сентября 2010

У меня есть Grails WebFlow, который похож на следующий пример:

def myFlow = {
    init {
        action {
            def domain = MyDomain.get(params.id)
            flow.domain = domain ? domain : new MyDomain()
        }
        on('success').to 'first'
    }

    first {
        on('continue') {
            flow.domain.properties = params
            if(!flow.domain.validate()) {
                return error()
            }
        }.to 'second'
    }

    ...
}

В этом примере, если при переходе возникает ошибка проверки on('continue') в first:

  • Каков предпочтительный способ задания модели с недопустимым доменным объектом, чтобы я мог использовать <g:hasErrors>... в своем представлении (как в обычном действии контроллера)?
  • Когда я вызываю error(), отправляет ли он поток обратно на init или на first?
  • Принимает ли error() какие-либо аргументы (например, модель), которые могут быть использованы для того, что я пытаюсь выполнить (я не могу найти много документации по методу error()).
  • Я бы также принял предложения о том, как улучшить свои состояния потока, чтобы упростить обработку этих ошибок проверки.

Сводка: Какой предпочтительный способ отображения ошибок проверки в веб-потоке Grails?

Ответы [ 2 ]

3 голосов
/ 22 сентября 2010

-1

Какой предпочтительный способ установить модель с неверным доменным объектом так что я могу использовать ... в моем посмотреть (как я бы в нормальном действие контроллера)?

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

action {
  user.validate()
  return [user:user]
}

Вы также можете установить свои ошибки во флеш-области. При каждом переходе Grails будет копировать содержимое области флеш-памяти в ModelView и таким образом будет доступно на вашей странице gsp

action {
   flash.error = "your message"
}

-2

Когда я вызываю error (), отправляет ли он поток обратно в init или первый? Когда вы называете ошибку, она вызывает переход, который вы определили для

Вы должны определить обработчик для таких как

on("error").to("handlerError")

Принимает ли error () какие-либо аргументы (например, модель), которые можно использовать для что я пытаюсь сделать (не могу найти много документации по ошибке () метод).

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

on("error") {
  // do Something
}.to("handlerError")
* * 3- тысяча двадцать восемь

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

Я использую flash для глобальных ошибок и ошибок формы, но мне нужен ОДИН способ справиться с этим. В настоящее время в Grails область действия флэш-памяти управляется иначе, чем в обычном действии. Поэтому я решил написать небольшой плагин, чтобы изменить способ обработки области флеш-памяти в потоке и привести его в соответствие с тем, как управляется в обычном действии. На странице gsp я могу использовать свои теги следующим образом независимо от типа действия (обычный или поток)

    <message:global />
or 
    <message:inline />

Что касается ошибок полей формы, я не хотел иметь дело с ошибками в объектах домена. Я хотел что-то более единое. Поэтому я решил сделать их частью протокола http, и у меня есть компонент javascript, который, если я решу, добавлю их в форму. Я обнаружил, что это решение намного чище, чем каждый раз, когда приходится иметь дело с ошибками g:

* 1040 Кен *

0 голосов
/ 21 сентября 2010

Я обнаружил, что один из способов сделать это - специально вызвать render() в переходном состоянии, предоставляя модель.Вот пример, где проверяется только одно поле:

first {
    render(view: 'info', model: [flow.domain])
    on('continue') {
        if(!flow.domain.validate(['myField'])) {
            return error()
        }
    }.to 'second'
}

Затем можно использовать <g:hasErrors> следующим образом:

<g:hasErrors bean="${domain}" field="myField">
    <g:renderErrors bean="${domain}" as="list" field="myField"/>
</g:hasErrors>
...