Использование JSF в качестве технологии просмотра Spring MVC
В настоящее время я внедряю небольшой Spring MVC PoC, и я хотел бы использовать JSF в качестве технологии просмотра, поскольку большинство людей в моей компании привыкли к среде J2EE с Primefaces.
Spring MVC 3 поддерживает JSF или просто JSP? Я прочитал несколько статей, смешивая их.
Мне нужно создать привлекательный интерфейс. Есть ли простой способ сделать это, используя Spring MVC с JSP в качестве технологии представления?
Наше приложение использует графики / календари на нескольких страницах. Это в основном приложение для управления временем
3 ответа
Вы делаете концептуальную ошибку. 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. Компоненты вывода JSF могут работать, но компоненты ввода JSF не будут работать вообще. Spring MVC уже имеет свою <form:xxx>
теги для ввода. Даже если вы смешаете их, вы получите половину функциональности обеих платформ в смешанной и запутанной кодовой базе. Это не имеет никакого смысла. Если все, что вам нужно, это использовать тот же пользовательский интерфейс, что и PrimeFaces, просто возьмите jQuery UI. Это именно то, что PrimeFaces использует под прикрытием. PrimeFaces - это библиотека компонентов JSF на основе jQuery.
С другой стороны, очень хорошо, что вы перепутали Spring IoC/DI с Spring MVC. Spring IoC/DI, в свою очередь, может использоваться вместе с JSF. Вы можете заменить объект управляемого компонента JSF (@ManagedBean
и друзья) к весеннему бобу (@Component
и друзья), как правило, с единственной целью, чтобы использовать @Autowired
в бобе поддержки JSF. Но это все. Жизненный цикл инфраструктуры JSF MVC, компоненты JSF и технология представления остаются неизменными. Стандартным эквивалентом Java EE будет использование CDI (и EJB).
Та же история относится к Spring Security. Вы можете использовать его вместе с JSF, однако вы не должны следовать документации / примерам Spring Security + Spring MVC для его настройки, а только Spring Security + JSF. Обратите внимание, что ограничения Spring Security для бизнес-действий работают только тогда, когда вы заменяете управляемый объект JSF на управляемый компонент Spring. Так что для этого все еще потребуется "Интегрировать 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 Boot в основном позволяет запускать приложение Java EE, используя простой класс приложения Java с main()
метод "в простой и абстрактный способ". Без Spring Boot это, безусловно, возможно (иначе Spring Boot никогда бы не существовал), это всего лишь немного больше работы по настройке, так как вы должны учитывать специфические для сервера детали на основе его документации. Например: Undertow и Jetty.
Возвращаясь к JSF и Spring MVC, если это действительно необходимо, вы можете безопасно запускать Spring MVC и JSF рядом друг с другом в одном веб-приложении, но они не будут взаимодействовать на стороне сервера. Они будут работать полностью независимо. Они будут максимально касаться друг друга на стороне клиента, если какой-то JavaScript на HTML-странице, созданной JSF, вызовет вызов веб-службы Spring на основе REST в том же веб-приложении. Но тогда этому веб-сервису Spring не нужно было бы ничего знать о JSF, чтобы отвечать соответствующим образом. Стандартным эквивалентом Java EE этого веб-сервиса Spring REST является JAX-RS.
Предстоящий Java EE 8 будет поставляться с новой платформой MVC, основанной на запросах, названной просто " MVC", основанной на уроках как JSF, так и Spring MVC, тем самым вытесняя Spring MVC и предоставляя стандартную альтернативу JSF.
Смотрите также:
- Что такое Java EE?
- Разница между запросом MVC и компонентом MVC
- Каковы основные недостатки Java Server Faces 2.0?
- Зачем нужен JSF, когда пользовательский интерфейс может быть реализован с помощью CSS, HTML, JavaScript, jQuery?
- Когда необходимо или удобно использовать Spring или EJB3 или все вместе?
- Интеграция Spring JSF: как внедрить компонент / сервис Spring в управляемый компонент JSF?
- Почему Facelets предпочтительнее, чем JSP, как язык определения представления, начиная с JSF2.0?
Spring MVC и JSF на самом деле не смешиваются. Вы можете использовать JSF для просмотра связанных вещей и иметь Spring, управляющий и связывающий резервную копию (сервисы, daos и т. Д.). Но попытка сопоставить @Controllers со страницами JSF - это не то, что действительно хорошо работает (за исключением того, что оба - разные запросы стеков, основанные на компонентах).
Чтобы интегрировать Spring с JSF, вам нужно добавить SpringBeanFacesELResolver
на ваши лица-config.xml. Это будет искать бины из контекста приложения Springs. Чтобы это работало, вы должны использовать простые аннотации JSF, а не аннотации на основе CDI.
Spring Webflow может помочь здесь. Проверьте этот пример проекта. https://github.com/spring-projects/spring-webflow-samples/tree/master/primefaces-showcase