2016-06-15 3 views
1

Ситуация следующая:форма с параметрами поля загружаются из БД и проверки

  1. У меня есть страница JSP с формой.
  2. Эта форма содержит различные теги <select> с параметрами, загружаемыми из БД.
  3. Я хочу использовать проверку с XML-файлом.

Проблема заключается в следующем: если я использую файл XML и есть некоторые ошибки в полях формы, рамки распорки не проходят через метод класса я выложил, но он будет непосредственно возвращать input результат. Так в чем смысл? Таким образом, я не могу загрузить параметры для различных тегов <select>, упомянутых выше.

Так я думал, что сделать что-то вроде этого:

<result name="input" type="chain"> 
    <param name="actionName">Class_method</param> 
</result> 

, но этот трюк я теряю все сообщения об ошибках, т.е. hasFieldErrors() возвращает всегда ложные.

Как я могу это решить?

ответ

1

Многие вопросы, все хорошо, хотя.

  1. Conversion and validation errors forces the Workflow interceptor to trigger the INPUT result и рабочий процесс будет выполняться INPUT результат вместо достижения метода действия (execute() или любой другой).

  2. Если вам нужно заполнить некоторые статические данные, как источники selectboxes, которые должны быть доступны также в случае INPUT результата, вы должны поставить эту нагрузку в методе prepare() и сделать ваши действия реализуют интерфейс Preparable. Этот метод запускается перехватчиком до возвращения результата INPUT, as described in the official docs.

  3. Избегайте использования результата chain. Это официально обескураживается с многих лет.

  4. Если вы хотите предотвратить двойное подчинение (нажав F5 после отправки страницы и получившего результат), вы можете использовать PRG pattern с результатом redirectAction. Таким образом, однако, вы столкнулись бы с той же проблемой результата chain: сообщения (и параметры) будут потеряны.

  5. Чтобы сохранить сообщения об ошибках, ошибки действий и ошибки на места по всем перенаправлениям, вы можете использовать предопределенный перехватчик под названием Message Store перехватчик, что вы должны включить в своем стеке, потому что defaultStack не включает его. Я описал how it works in this answer.

  6. Если вы решили использовать хранилище сообщений вместе с PRG, есть еще много соображений, которые можно было бы здесь написать, но это может быть объяснено в будущем, о предотвращении бесконечной рекурсии из-за Field Error -> INPUT -> PRG -> Retrieve Field Error -> INPUT -> etc..., которая будет заблокирована браузер около 10-й рекурсии ... но это еще одна история.

+0

Большое спасибо. Только одно, я попробовал, и Подготовительный интерфейс * должен * быть реализован, чтобы позволить подготовить перехватчик вызова метода подготовки. – zer0uno

+1

Вы правы: «Подготовительный» не реализован «ActionSupport», как я не помню; У меня есть «Подготовительный», реализованный на моем BaseAction, который расширен всеми другими действиями ... пишите один раз и забудьте :) Спасибо –

0

Один из вариантов:

public class Foo extends ActionSupport { 
    public string myAction() { return SUCCESS; } 
    public void validateMyAction() { // executed after XML validation 
     // other complex validation here if needed 
     if (hasErrors()) { 
      // repopulate form data from DB here 
     } 
    } 
} 

hasErrors() метод исходит из интерфейса ValidationAware которые ActionSupport орудий.

Другой вариант сделать редирект на input результат и использовать message store interceptor держать сообщения действий

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