我刚刚在链接之前看到这篇文章。
我试图在此基础上建立一个示例项目。只需将primeface按钮替换为jsf命令按钮即可。见下文:
template.xhtml
<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">
<h:head>
<!-- Links to CSS stylesheets... -->
<title>title</title>
</h:head>
<h:body>
<div id="wrapper">
<div id="header">header</div>
<script>alert("test");</script>
<h:panelGroup id="content">
<ui:insert name="content">
Sample content.
</ui:insert>
</h:panelGroup>
</div>
<div id="footer">footer</div>
</h:body>
page1.xhtml如下:
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
template="./template.xhtml">
<ui:define name="content">
<h2>Page 1</h2>
<h:form>
<p>bla</p>
<h:commandButton value="page2" action="page2">
<f:ajax render=":content"></f:ajax>
</h:commandButton>
</h:form>
</ui:define>
最后page2.xhtml看起来是这样的:
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
template="./template.xhtml">
<ui:define name="content">
<h2>Page 2</h2>
<h:form>
<p>blabla</p>
<h:commandButton value="page1" action="page1">
<f:ajax render=":content"></f:ajax>
</h:commandButton>
</h:form>
</ui:define>
正如您所看到的,我在template.xhtml上有一个简短的javascript。我现在想知道,当从page1更改为page2时,不会调用这个javascript。因此,我认为使用这个ajax导航只会更新内容部分,而不会在页面更改时调用脚本。
但当我点击commandButton时,脚本就会被执行。我看了一眼firebug,发现孔体部分更新了,而不仅仅是内容分区。
我做错了什么?使用这种模板技术是否可以只在内容部分进行导航?还是我必须寻找另一种方法来解决这个问题?
我正在使用tomcat和myfaces。
提前感谢!
我认为这是不可能的。如果您将视图从page1更改为page2,那么实际上page2是从模板开始构建的。
如果您希望为page1运行脚本,则将其包含在插入到模板中的page1的内容中,而不包含在page2中,这样您将仅在需要时调用脚本,而不是在主模板中调用脚本。