包括在使用界面包含一个XHTML文件JS文件:包括
我会用一个例子ilustrate我的问题:包括在使用界面包含一个XHTML文件JS文件:包括
outerfile.xhtml:
<h:head>
<h:outputScript library="js" name="jquery-1.6.2.js" />
<h:outputScript library="js" name="outer.js" />
</h:head>
<h:body>
<h:panelGroup id="inner_panel">
<ui:include src="innerfile.xhtml" />
</h:panelGroup>
</h:body>
innerfile.xhtml:
<ui:composition ... >
<h:head>
<h:outputScript library="js" name="jquery-1.6.2.js" />
<h:outputScript library="js" name="inner.js" />
</h:head>
<h:body>
<h:panelGroup>
I Am Text in The Inner File!
</h:panelGroup>
</h:body>
</ui:composition>
我的问题:
- 是否可以dec按照我的方式在内部文件中添加
js
文件? - 我是否需要(而且应该)在内部文件中再次声明通用(
jquery-1.6.2.js
)? - 如果我使用AJAX解除渲染并重新渲染
inner_panel
,会发生什么?内置头文件是否会重新加载?
是不是好申报内部文件中的js文件我做的方法是什么?
不可以。您不应在include中指定<h:head>
。这只会导致无效 HTML。正如你现在所拥有的将导致:
<html>
<head>
<script></script>
</head>
<body>
<head>
<script></script>
</head>
<body>
</body>
</body>
</html>
(右击页面在浏览器和做查看源代码自己看看吧,w3-validate如果需要的话)相应
修复它innerfile.xhtml
:
<ui:composition ... >
<h:outputScript library="js" name="jquery-1.6.2.js" target="head" />
<h:outputScript library="js" name="inner.js" target="head" />
<h:panelGroup>
I Am Text in The Inner File!
</h:panelGroup>
</ui:composition>
这将导致有效的HTML。 <h:outputScript target="head">
宣布的脚本将自动结束于<head>
(如果尚未声明)。与在真实的HTML中一样,在整个视图中应该只有一个一个<h:head>
和<h:body>
,包括任何模板和包含文件。
我需要(也应该I)内部文件中再次声明常见(jQuery的1.6.2.js)?
如果父文件已将其声明为<h:outputScript>
,则不应该如此。但在包含中重新声明它并不会造成伤害。无论如何,如果它已经被宣布过,它将不会被复制。
如果我未呈现和使用Ajax的重新渲染
inner_panel
会发生什么?内置头文件是否会重新加载?
这只适用于如果你不使用target="head"
。它们是否会从服务器重新加载,取决于它之前是否已经被浏览器请求,并且已经存在并且在浏览器缓存中有效。但基本上,浏览器会再次被告知加载它,是的。借助Firebug,您可以轻松确定它。
把它写正确的方法是使用target =“头”您的H内部:在innerfile.xhtml outputScript声明:
<ui:composition ... >
<h:outputScript library="js" target="head" name="jquery-1.6.2.js" />
<h:outputScript library="js" target="head" name="inner.js" />
<h:panelGroup>
I Am Text in The Inner File!
</h:panelGroup>
</ui:composition>
这样一来所有的资源声明将外内放。具有相同库/资源名称的同一资源的多个声明将不会多次呈现相同的声明,因为h:outputScript的呈现器具有一些代码,用于检测并忽略重复的条目。注意事情是不同的,如果你渲染一个没有引用JavaScript文件的h:outputScript。
Tnx。小跟进 - 根据你的回答,如果我加载页面时,内部页面没有呈现,然后呈现内页面,内部的js文件将会丢失。对? – Ben
我没说过。他们将被包括在内。浏览器将被告知加载它们。但是,无论是从浏览器缓存中获取还是从服务器获取,都取决于JS响应中的标题,以及它是否已经存在于浏览器缓存中。如果它是可缓存的并存在于浏览器缓存中,那么它将不会被重新加载(因为浏览器已经拥有它)。否则,它确实会从服务器重新加载。 – BalusC
我明白你的意思了,我澄清了重新渲染部分。 – BalusC