5

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

但是当我删除定义和组合标签时,加载的函数被调用。知道为什么会这样吗?

这是模板文件

<!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>

4

2 回答 2

14

在构建视图期间,外部 的所有内容都会<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>

也可以看看:

于 2012-06-14T12:59:50.373 回答
1

您正在将“内容”传递给模板。如果您的模板不包含“内容”,则它不会包含在生成的 HTML 中。

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

于 2012-06-14T05:46:32.750 回答