Skip to main content link. Accesskey S
  • Help
  • HCL Logo
  • HCL Notes and Domino Application Development wiki
  • THIS WIKI IS READ-ONLY. Individual names altered for privacy purposes.
  • HCL Forums and Blogs
  • Home
  • Product Documentation
  • Community Articles
  • Learning Center
  • API Documentation
Search
Community Articles > 日本語 - Japanese > XPages 内の JSF ライフサイクルのフェーズを表示する方法
  • Share Show Menu▼
  • Subscribe Show Menu▼

Recent articles by this author

JMeter で XPages アプリケーションをテストする、入門編

JMeter を初めて使う方にむけて、Domino アプリケーションや XPages アプリケーションを JMeter でテストをするための手順を最初のステップから解説します。

Eclipse Memory Analyser Tool を使用した、XPages のメモリリークの調査

Java アプリケーションのメモリリークを調査する強力なツールである Eclipse Memory Analyser Tool を使用して、XPages アプリケーションのメモリリークを調査する方法について紹介します。

XSP クライアントサイド Javascript オブジェクト関数

XPages アプリケーション開発の中で利用できる、XSP クライアントサイド Javascript オブジェクト関数について解説します。

Lotus Notes Java クラスのリサイクルとメモリ消費の検証

XPages や Java エージェントなどで Lotus Notes を操作する Lotus Notes Java クラスでは、開発者が明示的にリサイクルをして使用したオブジェクトを開放する必要があります。このリサイクルを適切に行わないことで、Java クラスの

XPages アプリケーションでの「可視(rendered)」プロパティによるパフォーマンス低下への対策

XPages アプリケーション開発で、「可視」設定ので「値の計算」はパフォーマンス低下を招く可能性があります。「可視」評価の Javascript に複雑な処理を実装する必要があるときには、そのスクリプトでパフォーマンスの低
Community articleXPages 内の JSF ライフサイクルのフェーズを表示する方法
Added by ~Justin Elwemarynds | Edited by ~Justin Elwemarynds on March 19, 2013 | Version 10
  • Actions Show Menu▼
expanded Abstract
collapsed Abstract
XPages の裏側のでは JavaServer Faces の技術が使われています。より良い XPages アプリケーションを作成するには、この JSF の仕組みの理解が必要です。この記事では XPages の裏側で動く JSF のライフサイクルの動きを知るための方法を紹介します。
Tags: XPages JSF
ShowTable of Contents
HideTable of Contents
  • 1 はじめに
  • 2 faces-config.xml の設定
  • 3 Java クラスの実装
  • 4 テスト
    • 4.1 XPage を表示したときのコンソール
    • 4.2 部分更新をしたときのコンソール
  • 5 テスト環境

はじめに

XPages の裏側のでは JavaServer Faces の技術が使われています。より良い XPages アプリケーションを作成するには、この JSF の仕組みの理解が必要です。この記事では XPages の裏側で動く JSF のライフサイクルの動きを知るための方法を紹介します。

 

faces-config.xml の設定

JSF ライフサイクルのフェーズを表示するには、フェーズリスナーとなる Java クラスを実装し、JSF コンテナに登録する必要があります。XPages の場合も、普段は見えないですが NSF ファイルの中に JSF の設定が隠れています。

Domino Designer のメニューから 「ウィンドウ」→「Eclipse ビューの表示」→「パッケージエクスプローラ」を選択して。パッケージエクスプローラーを表示します。これは NSF 内部の設計要素を Eclipse File System を通してひょうじします。

WebContent\WEB-IN フォルダの下の \faces-config.xsml を開き、以下のような <lifecycle> 定義を追加します。
 

	 
	<?xml version="1.0" encoding="UTF-8"?>
	<faces-config>
	    <lifecycle>
	        <phase-listener>mypackage.MyPhaseListener</phase-listener>
	    </lifecycle>
	</faces-config>
	
 

Java クラスの実装

先ほど定義した faces-config.xml にし従い、JSF ライフサイクルを表示するフェーズリスナーを実装します。

Domino Designer で「アプリケーション」タブに戻り「コード/Java」で新規の Java クラスを以下のように定義します。これは先ほどの faces-config.xml に合わせて設定します。

パッケージ:  mypackage

クラス:   MyPhaseListener

 

	 
	package mypackage;
	 
	import javax.faces.event.PhaseEvent;
	import javax.faces.event.PhaseId;
	import javax.faces.event.PhaseListener;
	 
	public class MyPhaseListener implements PhaseListener {
	 
	    private static final long serialVersionUID = 1L;
	 
	    public PhaseId getPhaseId() {
	        return PhaseId.ANY_PHASE;
	    }
	 
	 
	    public void beforePhase(PhaseEvent phaseEvent) {
	        System.out.println("=== フェーズ開始 " + phaseEvent.getPhaseId().toString());
	    }
	    
	    public void afterPhase(PhaseEvent phaseEvent) {
	        System.out.println("=== フェーズ終了 " + phaseEvent.getPhaseId().toString());
	        if (phaseEvent.getPhaseId().equals(PhaseId.RENDER_RESPONSE)) {
	            System.out.println("=== XPage 処理完了");
	            System.out.println(".");System.out.println(".");
	        }
	    }
	}
	

テスト

これで準備は完了です。

同じ NSF ファイルに適当な XPage を作成します。この XPage にはページの更新を行うボタンも配置してください。以下のサンプルでは XPage のイベントもあわせて表示するようにイベント処理も追加しています。そして、この XPage をブラウザで表示したり、ボタンを押してページ更新をすることで、JSF ライフサイクルの様子が Domino コンソールに表示されます。

※ Domino Designer でのプレビューのときにはコンソールがないので、出力の内容は log.nsf に表示されます。Domino Designer の notes.ini に DEBUG_CONSOLE=1 を設定して再起動することで Domino のようにコンソールを出力することもできます。

	 

	 
	<?xml version="1.0" encoding="UTF-8"?>
	<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
	    <xp:this.beforePageLoad><![CDATA[#{javascript:print("\tbeforePageLoad event")}]]></xp:this.beforePageLoad>
	    <xp:this.afterPageLoad><![CDATA[#{javascript:print("\tafterPageLoad event")}]]></xp:this.afterPageLoad>
	    <xp:this.afterRestoreView><![CDATA[#{javascript:print("\tafterRestoreView event")}]]></xp:this.afterRestoreView>
	    <xp:this.beforeRenderResponse><![CDATA[#{javascript:print("\tbeforeRenderResponse event")}]]></xp:this.beforeRenderResponse>
	    <xp:this.afterRenderResponse><![CDATA[#{javascript:print("\tafterRenderResponse event")}]]></xp:this.afterRenderResponse>
	    Hello XPages !
	    <xp:br></xp:br>
	    <xp:button value="Refresh" id="button1">
	        <xp:eventHandler event="onclick" submit="true"
	            refreshMode="complete">
	        </xp:eventHandler>
	    </xp:button>
	</xp:view>

	 

	

 

XPage を表示したときのコンソール

作成した XPage をブラウザから最初に表示すると以下のようなコンソールログが表示されます。

	 
	 
	[00FC:000B-0EB0] 2013/03/18 23:58:23   HTTP JVM:     beforePageLoad event
	[00FC:000B-0EB0] 2013/03/18 23:58:23   HTTP JVM:     afterPageLoad event

	[00FC:000B-0EB0] 2013/03/18 23:58:23   HTTP JVM: === フェーズ開始 RENDER_RESPONSE 6

	[00FC:000B-0EB0] 2013/03/18 23:58:23   HTTP JVM:     beforeRenderResponse event
	[00FC:000B-0EB0] 2013/03/18 23:58:23   HTTP JVM:     afterRenderResponse event

	[00FC:000B-0EB0] 2013/03/18 23:58:23   HTTP JVM: === フェーズ終了 RENDER_RESPONSE 6

	[00FC:000B-0EB0] 2013/03/18 23:58:23   HTTP JVM: === XPage 処理完了

	[00FC:000B-0EB0] 2013/03/18 23:58:23   HTTP JVM:

	[00FC:000B-0EB0] 2013/03/18 23:58:23   HTTP JVM:

	 

	

ここで Create View/Restore View フェーズの情報が表示されていません。 stackoverflow の Tony のコメントexternal link によると、 最初のリクエストに対するパフォーマンスを上げるため Create View/Restore View フェーズの phase listening/notification をバイパスしているとのことです。

 

部分更新をしたときのコンソール

 

	 

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM: === フェーズ開始 RESTORE_VIEW 1

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM:     afterRestoreView event

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM: === フェーズ終了 RESTORE_VIEW 1

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM: === フェーズ開始 APPLY_REQUEST_VALUES 2

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM: === フェーズ終了 APPLY_REQUEST_VALUES 2

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM: === フェーズ開始 PROCESS_VALIDATIONS 3

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM: === フェーズ終了 PROCESS_VALIDATIONS 3

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM: === フェーズ開始 UPDATE_MODEL_VALUES 4

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM: === フェーズ終了 UPDATE_MODEL_VALUES 4

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM: === フェーズ開始 INVOKE_APPLICATION 5

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM: === フェーズ終了 INVOKE_APPLICATION 5

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM: === フェーズ開始 RENDER_RESPONSE 6

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM:     beforeRenderResponse evet

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM:     afterRenderResponse event

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM: === フェーズ終了 RENDER_RESPONSE 6

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM: === XPage 処理完了

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM:

	[00FC:000B-0EB0] 2013/03/18 23:58:33   HTTP JVM:

	

 

テスト環境

この記事の内容は Lotus Notes/Domino 8.5.3 FP1 で動作確認しました。

 


  • Actions Show Menu▼


expanded Attachments (0)
collapsed Attachments (0)
Edit the article to add or modify attachments.
expanded Versions (10)
collapsed Versions (10)
Version Comparison     
VersionDateChanged by              Summary of changes
This version (10)Mar 19, 2013, 11:48:34 PM~Justin Elwemarynds  
9Mar 19, 2013, 11:47:31 PM~Rebecca Minfreevitchobu  
8Mar 19, 2013, 11:46:51 PM~Rebecca Minfreevitchobu  
7Mar 19, 2013, 11:11:11 PM~Rebecca Minfreevitchobu  
6Mar 18, 2013, 3:22:12 PM~Rebecca Minfreevitchobu  
5Mar 18, 2013, 3:20:52 PM~Rebecca Minfreevitchobu  
4Mar 18, 2013, 3:20:14 PM~Rebecca Minfreevitchobu  
3Mar 18, 2013, 3:12:51 PM~Rebecca Minfreevitchobu  
2Mar 18, 2013, 3:11:41 PM~Rebecca Minfreevitchobu  
1Mar 18, 2013, 3:02:31 PM~Rebecca Minfreevitchobu  
expanded Comments (0)
collapsed Comments (0)
Copy and paste this wiki markup to link to this article from another article in this wiki.
Go ElsewhereStay ConnectedAbout
  • HCL Software
  • HCL Digital Solutions community
  • HCL Software support
  • BlogsDigital Solutions blog
  • Community LinkHCL Software forums and blogs
  • About HCL
  • Privacy
  • Accessibility