Рендеринг моего собственного тега <script>вместо тега, предоставленного JSF - PullRequest
0 голосов
/ 28 сентября 2010

У меня есть страница, которая состоит из пары фрагментов, и во фрагменте «заголовка» у меня есть этот тег <webuijsf:script id="script_logo" url="/resources/logo.js"/> Это отображается в HTML как <script src="/app/resources/logo.js" type="text/javascript" id="Header:script_logo"></script>. Это нормально и работает как положено. Теперь мне нужно как-то заставить JSF возвращать URL в javascript с текущей версией приложения. Это известная методика принудительной перезагрузки ресурса (javascript, css и images) в случае их обналичивания на стороне клиента. Мне нужно сделать что-то вроде <script src="/app/resources/logo.js?ver=1.0.405" type="text/javascript" id="Header:script_logo"></script>. Обратите внимание на параметр ver в URL.
Спасибо.
Томас

Ответы [ 2 ]

2 голосов
/ 28 сентября 2010

Ну, вы можете просто добавить его на страницу:

<script src="/app/resources/logo.js?ver=#{commonBean.version}" ...>

Я предположил, что вы хотите, чтобы версия была настраиваемой и отправлялась сервером, поэтому commonBean - это некоторый bean-компонент jsf, который возвращаетправильная версия.

Обновление: также взгляните на <rich:loadScritp>.(от RichFaces)

Последний вариант - создать свой собственный компонент и автоматически включить версию.Ищите учебник о том, как это сделать, для JSF 1.2

это нелегко
0 голосов
/ 08 июля 2013

Ну, это довольно просто.JSF 2 использует конфигурацию для привязки средства визуализации к компоненту.Для этого вам нужно семейство компонентов и тип рендерера.Теперь вы можете определить в вашем файле names-config.xml средство визуализации для этого семейства и типа визуализатора.

В Mojorra для выходного скрипта-компонента задана следующая конфигурация:

<renderer>
  <component-family>javax.faces.Output</component-family>
  <renderer-type>javax.faces.resource.Script</renderer-type>
  <renderer-class>com.sun.faces.renderkit.html_basic.ScriptRenderer</renderer-class>
</renderer>

IДолжен признать, что эта информация исходит из моей отладки.Я отладил ScriptRenderer и смог получить семейство компонентов и тип рендеринга из UIComponent.

Теперь, если вы используете другой рендерер для этого компонента, просто измените конфигурацию, и оригинал будет переписан:1008 *

<renderer>
  <component-family>javax.faces.Output</component-family>
  <renderer-type>javax.faces.resource.Script</renderer-type>
  <renderer-class>your.own.renderer.class</renderer-class>
</renderer>

Не забудьте, что все компоненты h: outputScript теперь будут рендериться с новым рендерером.То же самое касается таблиц стилей, но у них будет другой тип рендеринга.

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