リンクの前にこの投稿を見ました。
これをもとにサンプルプロジェクトを作ってみました。プライムフェイス ボタンを 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 を調べたところ、コンテンツ div だけでなく、穴の本体部分が更新されていることがわかりました。
私が間違っていることは何ですか?このテンプレート化手法で、コンテンツ部分だけにナビゲーションを作ることはできますか? または、この問題を解決するために別のアプローチを探す必要がありますか?
Tomcat と myfaces を使用しています。
前もって感謝します!