Javascript不能在JSF模板下工作

Javascript不能在JSF模板下工作,javascript,html,jsf,jsf-2,facelets,Javascript,Html,Jsf,Jsf 2,Facelets,我正在使用JSF模板和Primefaces Javascript代码似乎无法在ui:composition和ui:define标记下工作。以下代码未命中loaded()方法。这是content.xhtml文件 <h:head> <script language="javascript"> function loaded() { alert("Working!!"); } </script> </h:head> &l

我正在使用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>

模板
这是一个页脚
您正在将“内容”传递给模板。如果您的模板不包含“内容”,则不会包含在生成的HTML中

发布template.xhtml,让我们看看…

在构建视图期间,
之外的所有内容都被忽略。此外,无需再次重新说明
。要使用在页面加载期间运行的脚本,最好使用
。这将被重新定位到正文的末尾,从而在构建必要的HTMLDOM元素后被调用。这也比
onload
要快一些

总之,您的整个
内容.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的差异好主意:)。。。刚刚检查,似乎loaded()方法没有添加到输出html中。Steve我已经编辑了问题并添加了template.xhtml文件awesome!!成功了。谢谢你,巴卢斯。。。你是Stackoverflow上的超级英雄。再次感谢:)