2009-08-18 5 views
1

Я только начинаю с Grails, очевидно. Я создал свой класс и контроллер домена, добавил свою логику к контроллеру, и все работает нормально - до тех пор, пока ничего не получится.Как реализовать обработку ошибок в Grails?

Моя настраиваемое действие контроллер выглядит следующим образом:

def create = { 
    try 
    { 
     // Get the parameters. 
     def uid=params["uid"] 
     def pwd=params["pwd"] 
     if (!uid || !pwd) 
     { 
      throw new Exception('User ID and password are required') 
     } 
     /* other code */ 
    } 
    catch (Exception ex) 
    { 
     println ex.getMessage() 
    } 
} 

Мой код (/* other code */) работает отлично. Однако при вызове исключения сообщение об ошибке выводится на консоль, а браузер выдает ошибку 404. Очевидно, что это не путь.

Каков правильный способ сделать это?

ТИА,

Джон

ответ

-3

В файле BootStrap.groovy вы можете сделать это настроить улов-все обработчики для различных Java исключений. Here - статья об этом.

+0

-1: Вот почему вы никогда не должны связывать ответ. Link rot. –

4

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

Grails обеспечивает очень хорошую поддержку для проверки пользовательских входов. В зависимости от контекста вы должны либо определить ограничения в своих классах доменов, либо использовать command objects и определить там ограничения (если проверяемые поля не подкрепляются непосредственно классом домена). Таким образом, Grails автоматически проверяет вход пользователя на ваши ограничения (существует множество различных типов, таких как размер, пустые/непустые или даже ограничения RegExp) и сохраняет ошибки и соответствующие сообщения в классе домена. Затем вы можете легко отобразить соответствующие локализованные сообщения об ошибках в форме (view). Хорошая практика - отображать ошибки рядом с полем ввода, на который они ссылаются.

Посмотрите справочную документацию - особенно chapter 7 (validation).

404 вы получаете, вероятно, не из-за (выловленной) исключение, а потому, что вы не имеете представление с именем create.gsp или вызова render/redirect в своем действии.

Я надеюсь, что это ответит на ваш вопрос или, по крайней мере, указывает на то, что вы в правильном направлении. Удачи!

0

Как говорит Дэниел, используйте ограничения в своем классе домена и используйте метод validate() в своем контроллере вместо исключения исключений.

Если validate() возвращает false, снова визуализируйте форму с сообщением об ошибке.

Смежные вопросы