Включение одной страницы xhtml во все страницы xhtml

У меня есть сервлет на основе JSF 1.2. Делаю аннулирование сеанса, если пользователь какое-то время бездействует. Я должен показать диалоговое окно Jquery пользователю за 1 минуту до того, как произойдет аннулирование сеанса, и спросить, хочет ли пользователь продолжить или выйти из системы.

У меня есть код диалогового окна Jquery на странице xhtml (session.xhtml). У меня есть около 15-20 страниц в моем веб-приложении. Пользователь может бездействовать на любой из этих 15-20 страниц. Итак, мне нужно включить страницу session.xhtml во все мои страницы xhtml. Я делаю это, используя приведенный ниже фрагмент кода на всех моих страницах.

<ui:insert>
<ui:include src="/session.xhtml" />
</ui:insert>

У меня тут 2 проблемы.

а) По мере роста количества страниц в моем веб-приложении мне нужно продолжать добавлять приведенный выше код на каждую страницу.

б) Сопровождаемость кода: в дальнейшем, если кому-то еще придется разрабатывать некоторые страницы в моем веб-приложении, он может не вспомнить о включении приведенного выше кода.

Итак, вопрос в том, есть ли способ, которым я могу поместить эту страницу (скажем, где-нибудь в файле web.xml или в некоторых файлах xml), по которой по умолчанию этот файл session.xhtml будет доступен для всех страниц в моем веб-приложении?


person Vikas V    schedule 24.09.2012    source источник
comment
Что такое сервлет на основе JSF 1.2? Эта фраза в начале вашего вопроса не имеет никакого смысла. JSF имеет только один сервлет, FacesServlet, который является передним контроллером. Вы, как разработчик, обычно должны писать только представления (файлы JSP/XHTML) и модели (классы базовых компонентов).   -  person BalusC    schedule 18.10.2012
comment
Связанный: stackoverflow.com/questions/4792862/   -  person BalusC    schedule 18.10.2012
comment
@BalusC Что я имел в виду под сервлетом на основе JSF 1.2, так это то, что мое приложение представляет собой сервлет, а не портлет. Теперь, если мое приложение представляет собой портлет, я бы решил его, используя функции портала. Например, возьмем Liferay Portal. Вместо того, чтобы включать мою страницу xhtml во все мои другие страницы xhtml, я могу включить ее в тему Liferay. $theme.runtime(SessionWar). Поскольку тема применяется ко всем войнам (и ко всем страницам внутри войны), мне не нужно беспокоиться о включении моего кода монитора бездействия сеанса в каждую отдельную страницу xhtml. Я просто хотел уточнить свой вопрос, потому что у меня был этот ответ в голове.   -  person Vikas V    schedule 18.10.2012
comment
@BalusC И ссылку, которую вы предложили, я действительно использовал ‹ui:include›. Пожалуйста, еще раз просмотрите 2 проблемы, которые я упомянул в своем вопросе. Пожалуйста, также обратитесь к решению, которое я разместил в своем комментарии выше, в котором говорится об использовании функций портала. Теперь я определенно не могу использовать это решение для сервлета, поскольку там нет темы портала. Итак, ищу способ через JSF. Надеюсь, теперь я понял мой вопрос и фразу сервлета на основе JSF 1.2 :)   -  person Vikas V    schedule 18.10.2012
comment
@BalusC Ваши комментарии по этому поводу..?   -  person Vikas V    schedule 24.10.2012
comment
Извините, портлеты мне не по плечу, поэтому я не совсем понимаю, о чем вы говорите.   -  person BalusC    schedule 24.10.2012


Ответы (1)


Файл представления может иметь шаблон (что является хорошей практикой):

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:a="http://richfaces.org/a4j"
                ...
                template="../layout/maintemplate.xhtml">

вы можете поместить общую логику в maintemplate.xhtml. надеюсь это поможет.

person nigi    schedule 10.10.2012
comment
Ваше решение лучше, чем то, что я упомянул в своем посте. Вместо того, чтобы писать 3 строки кода, вашему решению требуется 1 строка кода. Но проблема все еще существует. Эта 1 строка кода должна быть размещена на всех страницах xhtml. Я искал способ поместить эту страницу в некоторые файлыfaces-config.xml или web.xml(не уверен), которые будут применяться ко всем страницам xhtml. Дайте мне знать, если решение может быть найдено в этом направлении. - person Vikas V; 11.10.2012