Включить файлы JS на основе текущей страницы

У меня есть следующее на моей главной странице оболочки jsf:

<head>
  <meta http-equiv="Content-Type" content="text/xhtml; charset=UTF-8"/>
  <title>
    <ui:insert name="pageTitle" /> 
  </title>

  <a4j:loadScript src="resource://jquery.js" />
  <a4j:loadScript src="resource:///bla/html/js/base.js" />
  <a4j:loadScript src="resource:///bla/html/js/common.js" />
  <a4j:loadScript src="resource:///bla/html/js/inactivity.js" />
</head>

Теперь у меня есть новая страница на сайте и для нее требуются некоторые функции js. Итак, я создал новый js-файл myNewJSFile.js.

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

Мне нужно одно место, где я могу определить, какие файлы загружать на основе текущей страницы.

Что-то вроде этого (псевдокод):

основная jsf-обертка:

<head>
  <jsIncludes>
</head>


Файл jsIncludes:

<a4j:loadScript src="resource://jquery.js" />
<a4j:loadScript src="resource:///bla/html/js/base.js" />
<a4j:loadScript src="resource:///bla/html/js/common.js" />
<a4j:loadScript src="resource:///bla/html/js/inactivity.js" />

<if page == "myNewPage>
  <a4j:loadScript src="resource:///bla/html/js/myNewJsFile.js" />
<elfeif ...>
...
</if>


Есть ли простой способ сделать это?

Спасибо


person Thomas Buckley    schedule 03.03.2011    source источник


Ответы (2)


a4j:loadScript всегда помещает javascript в <head>, независимо от того, где вы его используете, вам не нужно ничего делать. (документ не упоминает об этом по какой-то странной причине)

Итак, чтобы ответить на ваш вопрос: если вы используете <a4j:loadScript src="resource:///bla/html/js/myNewJsFile.js" /> на странице, где вам это нужно, <script style="text/javascript" src="..." /> появится в <head>.

person Adam    schedule 03.03.2011
comment
Если это правда, то это путь. JSF 2.0, кстати, предоставляет <h:outputScript>, который также вставляет его в <head> независимо от того, где вы его объявляете. - person BalusC; 04.03.2011
comment
Да, я проверял это там, и это, безусловно, все укладывается в голове с помощью a4j: loadScript. Я пойду с этим решением. Спасибо Адам и BalusC. - person Thomas Buckley; 04.03.2011

Я бы предпочел добавить еще один <ui:insert> к <head> основного шаблона.

<head>
    ...
    <ui:insert name="headContent" />
</head>

Затем в шаблоне страницы просто укажите дополнительный скрипт, который будет туда вставлен.

<ui:composition template="main.xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:a4j="http://??? can't tell from top of head :)"
>
    <ui:define name="headContent">
        <a4j:loadScript src="resource:///bla/html/js/myNewJsFile.js" />
    </ui:define>

    ...
</ui:composition>
person BalusC    schedule 03.03.2011