Абсолютное имя пути в моем шаблоне для получения ресурсов - PullRequest
5 голосов
/ 11 сентября 2011

В моем приложении JSF 2.0 Facelets у меня есть один великолепный шаблон, который я хочу использовать на всех страницах.Он находится в корневом каталоге веб-приложения, замаскированного именем template.xhtml.Так что на него ссылаются, как и следовало ожидать:

<ui:composition template="./template.xhtml">

Однако я время от времени перехожу к файлам клиента в подкаталогах.Полезно организовать их таким образом из-за разных уровней привилегий.Фейслеты в этих подкаталогах будут иметь ссылку на тот же шаблон, как этот:

<ui:composition template="../template.xhtml">

Пока все хорошо.Однако в заголовке шаблона я добавляю css следующим образом:

<link href="./resources/css/default.css" rel="stylesheet" type="text/css" />
<link href="./resources/css/tableLayout.css" rel="stylesheet" type="text/css" />
<link href="../resources/css/default.css" rel="stylesheet" type="text/css" />
<link href="../resources/css/tableLayout.css" rel="stylesheet" type="text/css" />

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

/TheApp-Ver1_0/resources/css/default.css

Проблема в том, что абсолютный путь начинается с переменной, а не с константы.Переменная зависит от того, как приложение развернуто в контейнере.Есть какой-нибудь чистый способ решить эту проблему?

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

1 Ответ

14 голосов
/ 11 сентября 2011

Путь template в <ui:composition> относится к собственной структуре папок веб-приложения, а не к корню домена (поскольку он не представляет URL-адрес!). Поэтому, если вы начнете с /, он будет разрешен относительно корневого контекста.

<ui:composition template="/WEB-INF/inc/template.xhtml">

(добавление /WEB-INF имеет то преимущество, что конечный пользователь не может открыть его напрямую, угадав URL)

Путь name <h:outputStylesheet>, <h:outputScript> и <h:graphicImage> всегда относится к корневой папке /resources, независимо от того, начинаете ли вы ее с / или нет.

<h:outputStylesheet name="css/default.css" />
<h:outputScript name="js/default.js" />
<h:graphicImage name="img/logo.png" />

Если по какой-то причине вы хотите использовать обычный HTML вместо компонентов JSF для включения CSS / JS / images, лучше всего предварительно указать путь с #{request.contextPath}, чтобы сделать его URL-адресом, относящимся к домену. так что вам не нужно возиться с контекстно-зависимыми URL. Смотрите также: Как получить базовый URL?

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