Где разместить компоненты композиции? (JSF 2.0) - PullRequest
3 голосов
/ 15 августа 2011

Я продолжаю практику с JSF 2.0.Я вижу, что создание шаблонов - это отличная вещь, и она имеет много преимуществ.Но сегодня у меня появилось новое сомнение, связанное с этим.

Я создал шаблон для своих страниц.В шаблоне я использую теги для частей, которые отличаются (эти части будут реализованы позже на странице с использованием тега композиции в сочетании с одним или несколькими тегами определения).

<ui:insert name="content" />

Также внутри шаблона, чтобы избежать использования большого количества кода в шаблоне, я создаю теги, чтобы добавить некоторые другие фрагменты xhtml.

<ui:include src="/languageChanger.xhtml"/>

Вот так выглядит структура моей папки:

enter image description here

Все это работает как я, но когда в URL я перехожу к languageChanger.xhtml, я вижусоставной кусок xhtml:

enter image description here

Мои сомнения:

- этот фрагмент независимого кода размещен в нужном месте? Или это неправильно,пользователь не должен видеть это по URL?

-Это место для сохранения, чтобы иметь другие компоненты, такие как логин, регистрация ...?

-Для того, чтобы избежать прямого доступа пользователя к компоненту, я мог бы поместить его в папку WEB-INF, но затем яесть проблема, что тег включения не находит путь.Что я должен делать?

-Что было бы наилучшей практикой, где размещать эти независимые куски кода?

Ответы [ 2 ]

5 голосов
/ 15 августа 2011

Этот фрагмент независимого кода размещен в нужном месте? Или это неправильно, пользователю не должно быть разрешено видеть это с URL-адреса?

Положите это где-нибудь в /WEB-INF.Контейнер запрещает прямой доступ к этой папке.


Можно ли сохранить это место для других компонентов, таких как вход в систему, регистрация ...?

Я вас не понимаю.Возможно, вы хотели сказать «безопасно» вместо «сохранить»?Что вы имеете в виду под «другими компонентами»?


Чтобы избежать прямого доступа пользователя к компоненту, я мог бы поместить его в папку WEB-INF, но тогда у меня возникла проблема, чтотег include не находит путь.Что мне делать?

Ваш путь был явно неверным.Шаблоны Facelet, включающие в себя теги и композиции (не составные компоненты) могут быть идеально помещены в /WEB-INF.


Что было бы наилучшей практикой, где размещать эти независимые блокикода?

Поместите его в /WEB-INF.Рекомендуется использовать абсолютные пути, то есть начинать путь с /.Это будет решено относительно корня веб-контента.Например,

<ui:include src="/WEB-INF/languageChanger.xhtml" />

Только "главная" страница (та, которую запрашивает URL) не может быть размещена в /WEB-INF.

1 голос
/ 15 августа 2011

За первые два вопроса:

  • Этот кусок независимого кода размещен в нужном месте ?, Или это неправильно, пользователь не должен иметь права видетьчто из URL?

  • Это место сохранить, чтобы иметь другие компоненты, такие как логин, регистрация ...?

Шаблоныи используемый по умолчанию контент находится в нужном месте.Они должны присутствовать в корневом каталоге документов веб-приложения, а не где-либо еще.

Для двух последних вопросов:

  • Чтобы избежать прямого доступа пользователя к компоненту iможет поместить его в папку WEB-INF, но тогда у меня есть проблема, что тег включения не находит путь.Что я должен делать?

  • Что было бы наилучшей практикой, где размещать эти независимые куски кода?

ЧастичноеОтвет предоставляется выше, где упоминалась необходимость размещать включенные файлы под корнем документа.«Средство распознавания ресурсов», используемое средой выполнения JSF, требует, чтобы фасет присутствовал в корневом каталоге документа приложения.По этой причине Facelets нельзя размещать в WEB-INF.

Если вам нужно запретить пользователям доступ к этим страницам напрямую, вы должны написать фильтр веб-приложений для предотвращения доступа к этим страницам.

Среда выполнения Mojarra не передает внутренне никаких HTTP-запросов к ресурсу шаблона;вместо этого он включает в себя содержимое файла, полученное в виде потока.Это означает, что вам не нужно ограничивать фильтр только типами отправки REQUEST;Вы можете применить фильтр ко всем типам отправки.

Размещение всех шаблонов и включенных лицевых сторон в каталоге /templates упростит применение фильтра к одному URL - /templates/*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...