2012-07-11 136 views
0

我刚刚在link之前看过这篇文章。通过ajax的JSF2导航

我试图建立一个基于此的示例项目。只需用jsf commandButton替换primeface按钮即可。请看下图:

的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脚本将被执行。 我看了一下萤火虫,看到洞体部分更新了,不仅内容div。

我做错了什么?使用这种模板技术可以仅在内容部分进行导航吗?还是我必须寻找另一种方法来解决这个问题?

我使用的是tomcat和myfaces。

在此先感谢!

+0

我再次检查了萤火虫输出锯,服务器在页面上的响应变化是完整的HTML网站。所以它似乎是,阿贾克斯根本不起作用。 – Jurek 2012-07-11 13:59:40

回答

0

我不认为这是可能的。如果您将视图从page1更改为page2,则基本上page2是从模板开始构建的。

如果您希望脚本为page1运行,那么将其包含在插入到模板中的page1的内容中,并且不要将其包含在page2中,这样您只需在不需要的情况下调用脚本主模板。

+0

感谢您的提示。但该脚本仅用于指示id为“content”的panelGroup外部的代码被重新加载。我想要一个在页面上加载的应用程序,只有通过ajax的内容部分。你有这个方法吗? – Jurek 2012-07-13 10:59:46