Я знаю, что существует много разных архитектур. В этом вопросе я рассматриваю трехуровневую архитектуру (уровень представления данных (логика занятости) и уровень доступа к данным (DAO)). И я хочу сосредоточиться на том, как уровень представления работает с уровнем обслуживания.
Проблема, с которой я столкнулся, стандартная. У меня есть уровень служб без сохранения состояния, и я думаю, что он должен быть без сохранения состояния ради масштабируемости и производительности.
У меня также есть слой с сохранением состояния. Например, когда пользователь заполняет какую-то форму, а введенные значения не проходят проверку, рекомендуется показывать все поля с введенными значениями и указывать на неправильные поля.
Итак, представьте, что у нас есть FooBean
с методами setFoo (Foo f)
, getFoo ()
и doSave ()
. Бин имеет Область сеанса.
И мы хотим сохранить (сохранить) новый экземпляр Foo. Что мы делаем, это вызываем метод setFoo (), а затем вызываем метод doSave (). Если сохранение не удалось, пользователь увидит только что заполненную форму со всеми введенными значениями (вызывается метод getFoo ()).
Это хорошо, но теперь представьте, что пользователь нажимает на ссылку Create Foo
, заполняет все поля, пытается сохранить, но не проходит проверку? Он снова увидит заполненную форму. И затем он снова нажимает «Создать Foo» (он хочет создать 2 объекта Foo одновременно). Он увидит заполненную форму с указанными ошибками. Но это плохо, потому что он еще не заполнил эту (вторую, новую) форму.
Если мы изменим область действия FooBean на Request
, то мы не сможем показать заполненную форму, когда это необходимо (после сбоя сохранения).
Итак, какой выход? Какое правильное решение? Это может быть специфичный для JSF или общий.