JSF 2.0では、ビュールート(JSFページ)が表示される前に、 `javax.faces.event.PreRenderViewEvent`システムイベントをアタッチしてカスタムタスクを実行できます。

下の完全な `PreRenderViewEvent`の例を見てみましょう:

1.マネージドBean

通常のBeanを作成し、メソッドシグネチャ「

public void method-name(ComponentSystemEvent event)

」を含む場合、後でこのメソッドを呼び出すようにリスナーに依頼します。

このメソッドでは、ロールが ”

admin

“と等しくない場合は現在のセッションで ”

role

“を検証し、 ”

access-denied

“という結果にナビゲートします。

package com.mkyong;

import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;

@ManagedBean(name="user")
@SessionScoped
public class UserBean{

  public void isAdmin(ComponentSystemEvent event){

    FacesContext fc = FacesContext.getCurrentInstance();

    if (!"admin".equals(fc.getExternalContext().getSessionMap().get("role"))){

        ConfigurableNavigationHandler nav
           = (ConfigurableNavigationHandler)
            fc.getApplication().getNavigationHandler();

        nav.performNavigation("access-denied");
    }
  }
}

2. JSFページ

さて、あなたは

` preRenderView

“システムイベントを” default.xhtml “ページに添付するために` f:event`タグを使います。


default.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      >

    <f:event listener="#{user.isAdmin}" type="preRenderView"/>

    <h:body>

        <h1>JSF 2 protected page example</h1>

    </h:body>

</html>


access-denied.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      >

    <h:body>

        <h1>Access Denied!</h1>

    </h:body>

</html>

デモ

このページ「

default.xhtml

」にアクセスします。セッションオブジェクトには「

role

」値がないため、JSFは別のページ「

access-denied.xhtml

」にナビゲートします。


jsf2-PreRenderViewEvent-example、title = "jsf2-PreRenderViewEvent-example"、width = 517、height = 265

ソースコードをダウンロードする

ダウンロードする – リンク://wp-content/uploads/2010/11/JSF-2-PreRenderViewEvent-Example.zip[JSF-2-PreRenderViewEvent-Example.zip](10KB)

リファレンス

2 PreRenderViewEvent JavaDoc]

リンク://タグ/jsf2/[jsf2]