Использование JSF в качестве технологии просмотра Spring MVC

В настоящее время я реализую небольшой Spring MVC PoC, и я бы хотел использовать JSF в качестве технологии просмотра, поскольку большинство людей в моей компании используются для J2EE с использованием среды Primefaces.

Поддерживает ли Spring MVC 3 JSF или просто JSP? Я прочитал несколько статей, смешивающих два.

Мне нужно создать привлекательный интерфейс. Есть ли простой способ сделать это с помощью Spring MVC с JSP в качестве технологии просмотра?

Наше приложение использует расписания/календари на кратных страницах. Это в основном APP управления временем

Ответ 1

Вы делаете концептуальную ошибку. JSF не является технологией просмотра. JSF - это структура MVC. Точно так же, как Spring MVC, хотя они имеют и другую идеологию; JSF представляет собой MVC на основе компонентов, а Spring MVC - это MVC, основанный на запросах. Таким образом, они являются полными конкурентами. Вы не можете их смешивать. Вы должны выбрать тот или другой. Вместо этого JSP и Facelets - это настоящие технологии просмотра. Поскольку Java EE 6 (декабрь 2009 г.), JSP устарел и заменен Facelets (XHTML) как технология просмотра по умолчанию для JSF.

Вы можете использовать Spring MVC с технологию просмотра JSP. Вы также можете использовать Spring MVC с Технология просмотра Faceletsмногие другие), Но вы не можете использовать Spring MVC с компонентами JSF, не говоря уже о библиотеках компонентов JSF, таких как PrimeFaces. Это не имеет никакого смысла. Spring В MVC уже есть теги <form:xxx>. Если вы хотите использовать тот же интерфейс, что и PrimeFaces, просто возьмите jQuery UI. Это также то, что PrimeFaces использует под обложками. PrimeFaces - это библиотека компонентов JSF на основе jQuery.

С другой стороны, также может быть очень хорошо, что вы путаете Spring IoC/DI с Spring MVC. Spring IoC/DI в свою очередь полезный вместе с JSF. Вы можете заменить управляемый JSF объект bean (@ManagedBeanи друзей) с помощью Spring управляемого bean объекта (@Component и друзей), как правило, с единственной целью использовать @Autowired в поддержке JSF bean. Но это так. Жизненный цикл структуры JSF MVC, компоненты JSF и технология просмотра остаются неизменными. Стандартный эквивалент Java EE, который будет использовать CDIEJB).

То же самое относится к Spring безопасности. Вы можете использовать его вместе с JSF, однако вы не должны следовать Spring безопасности + Spring целевой документации/примеров MVC, чтобы настроить его, но только Spring Security + JSF. Обратите внимание: Spring Ограничения безопасности для бизнес-действий действуют только при замене объекта bean, управляемого JSF, на Spring управляемый объект bean. Для этого все равно потребуется "Интегрировать Spring в JSF", как описано в предыдущем абзаце. Стандартный эквивалент Java EE этого всего будет использовать безопасность, управляемую контейнером (JAAS/JASPIC) через записи <security-constraint> в web.xml.

То же самое относится и к Spring WebFlow. Вам также необходимо убедиться, что вы используете самую последнюю версию Spring WebFlow, поскольку более старые версии вызывают конфликты при использовании вместе с несколькими библиотеками компонентов JSF. Более того, поскольку JSF 2.2, новая функция Faces Flows была введена как часть стандартного API Java EE, тем самым в основном делая Spring WebFlow излишним.

Тогда есть Spring Boot. Это не имеет прямого эквивалента в Java EE. Spring Загрузка в основном позволяет вам выполнить приложение Java EE с использованием простого класса Java-приложений с помощью метода main() "простым и абстрактным способом". Без Spring Загрузитесь, конечно, возможно (иначе Spring Boot никогда не существовал бы), это лишь немного больше работы по настройке, так как вам нужно учитывать специфические для сервера детали, основанные на его документации. Например: Undertow и Jetty.

Возвращаясь к JSF и Spring MVC, если это действительно необходимо, вы можете безопасно запускать Spring MVC и JSF рядом друг с другом в одном и том же веб-приложении, но они не будут взаимодействовать на стороне сервера. Они будут работать совершенно независимо. Они будут наиболее близко касаться друг друга на стороне клиента, если какой-либо JavaScript на странице HTML, созданной JSF, вызывает вызов веб-службы REST на основе Spring в том же веб-приложении. Но этот веб-сервис Spring тогда не понадобится/должен знать что-нибудь о JSF, чтобы соответствующим образом реагировать. Стандартный эквивалент Java EE этого веб-сервиса Spring REST JAX-RS.

Предстоящая Java EE 8 будет поставляться с новой структурой MVC, основанной на запросах, с именем "MVC" на основе уроков как JSF, так и Spring MVC, тем самым вытесняя Spring MVC и предоставляя стандартную альтернативу JSF.

См. также:

Ответ 2

Spring MVC и JSF не смешиваются. Вы можете использовать JSF для просмотра связанных вещей и Spring управлять и подключать резервные (службы, даос и т.д.). Но попытка сопоставления @Controllers с страницами JSF - это не то, что действительно хорошо работает (рядом с этим оба - это разные запросы стеков, основанные на основе компонентов).

Чтобы интегрировать Spring с JSF, вам нужно добавить SpringBeanFacesELResolver в ваши faces-config.xml. Это будет искать beans из контекста приложения Springs. Для этого вам нужно использовать простые аннотации JSF, а не аннотации на основе CDI.