0

リンクの前にこの投稿を見ました。

これをもとにサンプルプロジェクトを作ってみました。プライムフェイス ボタンを 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 を使用しています。

前もって感謝します!

4

1 に答える 1

0

私はそれが可能だとは思わない。ビューを page1 から page2 に変更する場合、基本的に page2 はテンプレートから作成されます。

スクリプトを page1 に対して実行する場合は、テンプレートに挿入される page1 のコンテンツにスクリプトを含め、page2 には含めないでください。そうすることで、マスター テンプレートで必要とされない場所でのみスクリプトを呼び出すことができます。

于 2012-07-12T02:19:05.790 に答える