С ростом сложности веб-проектов, над которыми я работаю, необходимость включения структуры MVC становится все более актуальной. Мои классы моделей хорошо определены, но код вида и контроллера имеет тенденцию смешиваться. Я также использовал довольно тяжелый AJAX на сайте (в основном RichFaces jsFunctions), что немного усложняет ситуацию.
Кто-нибудь нашел хорошие стратегии для реализации MVC с использованием JSF2? Я не хочу вводить другую структуру в проект (например, Spring MVC).
Некоторые идеи до сих пор, которые я еще не начал делать
- Для страницы с тяжелым ajax, имейте bean-компонент 'view' для запоминания выбранных вкладок, выбранных элементов, предоставления отфильтрованных списков данных и т. Д. *
- Иметь компонент 'controller' для обработки таких действий, как изменения в модели
- Иметь bean-компоненты 'command', которые идут между страницей JSF и контроллером. Функция jsFunction заполняет командный компонент параметрами, и при вызове
command.execute()
командный компонент вызывает правильный метод в компоненте контроллера для выполнения действия. Компонент 'command' может включать в себя некоторый JavaScript, который будет вызван по завершении. Он также может указывать регионы страницы, которые будут перерисованы.
Есть мысли?
Редактировать
Чаще всего я вижу управляемые bean-компоненты, которые стремятся делать все : отслеживать выбор пользователей, обновлять модель, получать отфильтрованные списки и т. Д. *
В настоящее время мы используем JSF 1.2 и поэтому не можем использовать action / actionlisteners с параметрами. Так, например, наши управляемые bean-компоненты содержат переменные, такие как m_selectedDate
, единственной целью которых является подача выбранной даты в серверную часть при вызове updateFilteredItemsBasedOnDate()
. Было бы хорошо, если бы дополнительные переменные могли исчезнуть, так как они просто временные. EL JSF 2 с параметрами должен помочь, но мне любопытно, есть ли альтернативное решение.
Мне любопытно, есть ли способ применить MVC к управляемым bean-компонентам или какой-то метод разделения проблем, чтобы мы не заканчивали большими bean-компонентами, которые пытаются делать все.