Javascript не работает под шаблоном JSF
Я использую шаблоны JSF и Primefaces.
Кажется, что код Javascript не работает под тегами ui:ограммы и ui: определения. Следующий код не работает с загруженным () методом. Это файл content.xhtml
<h:head>
<script language="javascript">
function loaded() {
alert("Working!!");
}
</script>
</h:head>
<ui:composition template="/template/template.xhtml">
<ui:define name="content">
<h:body style="width:100%;height:100%;" onload="loaded()">
<p class="item">Random text</p>
</h:body>
</ui:define>
</ui:composition>
но когда я удаляю теги define и Composition, вызывается загруженная функция. Есть идеи, почему это происходит?
Вот файл шаблона
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title><ui:insert name="title">Template</ui:insert></title>
</h:head>
<h:body>
<div id="header">
<ui:insert name="header">
<ui:include src="../menu.xhtml" />
</ui:insert>
</div>
<div id="content">
<ui:insert name="content">
<ui:include src="../content.xhtml" />
</ui:insert>
</div>
<div id="footer">
<ui:insert name="footer">
This is a footer
</ui:insert>
</div>
2 ответа
Все снаружи <ui:composition>
игнорируется при построении вида. Кроме того, повторное выделение <h:body>
еще раз не нужно. Чтобы использовать скрипт, который запускается во время загрузки страницы, лучше использовать <h:outputScript target="body">
, Это будет перемещено в конец тела и, таким образом, будет вызвано после того, как будут созданы необходимые элементы HTML DOM. Это также несколько быстрее, чем onload
,
Все со всем, весь вашcontent.xhtml
должен выглядеть так:
<ui:composition template="/template/template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<ui:define name="content">
<h:outputScript target="body">
alert("Working!!");
</h:outputScript>
<p class="item">Random text</p>
</ui:define>
</ui:composition>
Смотрите также:
Вы передаете "контент" в шаблон. Если ваш шаблон не включает "контент", он не будет включен в итоговый HTML.
Опубликовать template.xhtml и посмотрим...