Я достаточно хорошо знаком с тем, как использовать AJAX в JSF 2. Однако JSF 2 разработан с учетом традиционной навигации по страницам, а AJAX выбрасывается для предотвращения полной перезагрузки одной и той же страницы.
То, что я пытаюсь выяснить, - это хороший способ создать чистое веб-приложение AJAX с JSF 2. То есть веб-приложение, которое требует только одной начальной полной загрузки страницы за пользовательский сеанс.
Теперь, если у меня будет достаточно времени, я уверен, что смогу понять это для себя, но боюсь, что решение может быть неловким, и я могу нарисовать себя в углу.
Одна идея состоит в том, чтобы создать составные компоненты вместо страниц, а затем иметь одну страницу, которая включает в себя экземпляр каждого составного компонента со значением атрибута rendered
, вычисленным путем сравнения уникального имени страницы с переменной области сеанса, содержащей текущий имя страницы.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:page="http://java.sun.com/composite/components/pages">
<h:head>
<title>MyApp | #{pageBean.title}</title>
</h:head>
<h:body>
<!-- Header, sidebars, etc. go here -->
<!-- Pages -->
<page:home id="home" rendered="#{pageBean.name == 'home'}"/>
<page:search id="search" rendered="#{pageBean.name == 'search'}"/>
<page:profile id="profile" rendered="#{pageBean.name = 'profile'}"/>
<!-- etc... -->
</h:body>
Это только часть картины. Страница должна быть добавлена в закладки, что потребует хэш-взрыва и обработчика изменения хеша javascript. Фактически, навигация по страницам, вероятно, будет осуществляться путем установки привязки в javascript, позволяющей обработчику изменения хеша позаботиться обо всем остальном.
Идеи