Обслуживание ресурсов javascript / jsf из приложения jsf - PullRequest
0 голосов
/ 27 августа 2011

У меня есть файл "/js/ajax-error.js", который я хотел бы использовать "способом richfaces" следующим образом: "/ js / ajax-error.js.jsf" что я использую такие jsf-переменные в моем js-файле: "# {FaceContext.externalContext.requestContextPath}" .

Это возможно? Я пробовал префикс моего файла js с xhtml: он не работает.

Я использую richfaces + jsf 2.0 + сервлет 3.0

Может кто-нибудь помочь, пожалуйста?

(добавлено) Нет ли чистого JSF способа достижения желаемого эффекта?

Ответы [ 2 ]

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

Это можно сделать, но я настоятельно рекомендую, чтобы вы этого не делали. Держите ваш JavaScript чистым и кэшируемым.

Обычный шаблон, используемый для организации доступности серверных данных для JavaScript, - это перетаскивание значений в атрибуты «data-» в соответствующих частях HTML. Например, «глобальная» информация (например, информация о сеансе пользователя, такая как имя пользователя, название компании и т. Д.) Может быть присоединена к <body>:

<body data-username='John Phillip Sousa' data-registered='05 Jul 1903'>

Теперь JavaScript может узнать имя пользователя и дату регистрации, просто взяв атрибуты данных с тега <body>. изменить как это:

var body = document.getElementsByTagName('body')[0];
var username = body.getAttribute("data-username");
var registrationDate = body.getAttribute("data-registered");
0 голосов
/ 27 августа 2011

Если ваша единственная цель состоит в том, чтобы служить ему "путем Richfaces" (на самом деле это путь JSF 2.0), тогда используйте <h:outputScript>.Поместите файл в /resources/js/ajax-error.js общедоступного веб-контента (основной путь /resources является обязательным и его имя нельзя изменить).Затем ссылайтесь на него следующим образом:

<h:outputScript name="js/ajax-error.js" />

Независимо от его расположения в шаблоне, он будет сгенерирован в HTML <head>, как следует, предполагая, что ваш FacesServlet сопоставлен с *.jsf:

<script type="text/javascript" src="/contextname/javax.faces.resource/js/ajax-error.js.jsf"></script>

Но это не предлагает вам поддержку EL!Вы не сможете использовать #{} в этом сценарии.Только в таблицах стилей, которые включены в <h:outputStylesheet>, поддерживается #{} для поиска фоновых изображений способом JSF 2.0 #{resource['logo.png']}, но не более того.

В вашем конкретном случае я быскорее, ссылка #{facesContext.externalContext.requestContextPath} (или его более короткая и популярная копия #{request.contextPath}) в теге HTML <base> или какой-либо глобальной переменной JS или атрибуте HTML data.Если установлено значение <base>, все относительные ссылки будут относиться к нему, также в JS.

См. Также:

...