我正在使用JSF模板和Primefaces。
Javascript代码似乎不适用于ui:composition和ui:define标签。以下代码未命中loaded()方法。这是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>
答案 0 :(得分:13)
构建视图时 <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>
答案 1 :(得分:1)
您正在将“内容”传递给模板。如果您的模板不包含“内容”,则不会将其包含在生成的HTML中。
发布template.xhtml,让我们看看......