1

私はオムニフェイスを使うのは初めてです。私が集めた小さなことから、postInvokeActionは、jsf preRenderViewイベントよりも、flashscopeでオブジェクトを処理するときに使用するのに適した選択肢です。しかし、私が気付いたのは、listenerメソッドが2回呼び出されていることです。preInvokeActionはbeforeフェーズリスナーに類似しており、postInvokeActionはPhaseID.INVOKE_APPLICATIONに相当するafterフェーズリスナーに類似しているため、対応するイベントに対して1回だけ呼び出す必要があると感じました。これは正しいです?親切に説明してください。

私は現在、Mojarra2.1.17とOmnifaces1.3で実行しています。

返信をお待ちしております!

layout1.html

    <h:body>
    <p style="color: blue; font-size: 12pt;">1. This is the main content of the file.</p>
    <ui:insert name="body_contents"/>
    <p style="color: blue; font-size: 12pt;">This is the the remaining part of the document...   in layout1</p>
    </h:body>

samplepage2.html

<h:body>
    <f:view>
        <f:metadata>
            <f:viewParam name="dummy_var" value="#{sampletest.val_test}"/>
            <f:event type="postInvokeAction" listener="#{sampletest.frompostinvokeaction}" />
            <f:event type="preRenderView" listener="#{sampletest.fromprerenderview}" />
        </f:metadata>
    </f:view>
    <ui:composition template='/layout1.html'>
        <ui:define name="title_on_head">
            <style type="text/css">
                .pkssd{
                    min-width: 340px; min-height: 30px; background: appworkspace; color: blue; font-size: 11pt; font-style: italic;
                }
            </style>
        </ui:define>
        <ui:define name="body_contents">
            <p class="pkssd">This is the active content...</p>
        </ui:define>
    </ui:composition>
</h:body>

SampleTest.java

@ManagedBean(name="sampletest")
@ViewScoped
public class SampleTest {
private String val_test;    public void frompostinvokeaction(){
    System.out.println("frompostinvokeaction: val_test: " + val_test);    }
public void fromprerenderview(ComponentSystemEvent cse){
    System.out.println("fromprerenderview : val_test: " + val_test);
}
}
4

1 に答える 1

0

マスター/クライアントテンプレートの使用方法は完全には正しくありません。仕様から完全に外れており、不特定の動作を引き起こした可能性があります。

適切な方法は次のとおりです。

/WEB-INF/layout1.html

<!DOCTYPE html>
<html lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
>
    <f:view>
        <ui:insert name="metadata" />
        <h:head>
            ...
            <ui:insert name="title_on_head" />
            ...
        </h:head>
        <h:body>
            ...
            <ui:insert name="body_contents" />
            ...
        </h:body>
    </f:view>
</html>

/samplepage2.html

<ui:composition template="/WEB-INF/layout1.html">
    <ui:define name="metadata">
        <f:metadata>
            <f:viewParam name="dummy_var" value="#{sampletest.val_test}"/>
            <f:event type="postInvokeAction" listener="#{sampletest.frompostinvokeaction}" />
            <f:event type="preRenderView" listener="#{sampletest.fromprerenderview}" />
        </f:metadata>
    </ui:define>

    <ui:define name="title_on_head">
        <style type="text/css">
            .pkssd{
                min-width: 340px; min-height: 30px; background: appworkspace; color: blue; font-size: 11pt; font-style: italic;
            }
        </style>
    </ui:define>

    <ui:define name="body_contents">
        <p class="pkssd">This is the active content...</p>
    </ui:define>
</ui:composition>

(はい、それは完全なファイルであり、外部には何も<ui:composition>ありません)

参照:

于 2013-02-27T13:59:39.373 に答える