Как уровень представления (JSF) должен взаимодействовать с уровнем обслуживания (Spring)? - PullRequest
1 голос
/ 18 декабря 2009

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

Проблема, с которой я столкнулся, стандартная. У меня есть уровень служб без сохранения состояния, и я думаю, что он должен быть без сохранения состояния ради масштабируемости и производительности.
У меня также есть слой с сохранением состояния. Например, когда пользователь заполняет какую-то форму, а введенные значения не проходят проверку, рекомендуется показывать все поля с введенными значениями и указывать на неправильные поля.

Итак, представьте, что у нас есть FooBean с методами setFoo (Foo f), getFoo () и doSave (). Бин имеет Область сеанса.
И мы хотим сохранить (сохранить) новый экземпляр Foo. Что мы делаем, это вызываем метод setFoo (), а затем вызываем метод doSave (). Если сохранение не удалось, пользователь увидит только что заполненную форму со всеми введенными значениями (вызывается метод getFoo ()).

Это хорошо, но теперь представьте, что пользователь нажимает на ссылку Create Foo, заполняет все поля, пытается сохранить, но не проходит проверку? Он снова увидит заполненную форму. И затем он снова нажимает «Создать Foo» (он хочет создать 2 объекта Foo одновременно). Он увидит заполненную форму с указанными ошибками. Но это плохо, потому что он еще не заполнил эту (вторую, новую) форму.

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

Итак, какой выход? Какое правильное решение? Это может быть специфичный для JSF или общий.

1 Ответ

1 голос
/ 18 декабря 2009

Вам нужно то, что называется "разговор". Есть несколько способов для достижения этой цели.

Диалог - это управляемая автоматически или вручную область, которая больше, чем запрос, но меньше, чем сеанс. В идеале он должен хранить ваши бины столько, сколько нужно для их хранения - то есть в одном разговоре . Итак, из вашего примера, первый разговор закончится в тот момент, когда пользователь уходит с первой страницы.

Оркестр MyFaces (я не могу сказать, для шва) также может различать разные окна / вкладки браузера.

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