JSF 預(yù)構(gòu)建應(yīng)用程序事件示例

2018-02-22 12:21 更新

JSF教程 - JSF預(yù)構(gòu)建應(yīng)用程序事件示例


以下代碼顯示如何處理應(yīng)用程序級(jí)事件。

JSF在JSF應(yīng)用程序生命周期中有處理應(yīng)用程序特定任務(wù)的系統(tǒng)事件偵聽器。

  • 應(yīng)用程序啟動(dòng)時(shí)觸發(fā)PostConstructApplicationEvent。它可以用于在應(yīng)用程序啟動(dòng)后執(zhí)行初始化任務(wù)。
  • 應(yīng)用程序即將關(guān)閉時(shí),PreDestroyApplicationEvent觸發(fā)。它可以用于在應(yīng)用程序即將關(guān)閉之前執(zhí)行清除任務(wù)。
  • PreRenderViewEvent在顯示JSF頁面之前觸發(fā)。它可用于驗(yàn)證用戶并提供對(duì)JSF View的受限訪問。

我們可以通過實(shí)現(xiàn)SystemEventListener接口來處理系統(tǒng)級(jí)事件,并在faces-config.xml中注冊(cè)system-event-listener類。

我們還可以通過傳遞f:event的監(jiān)聽器屬性中的托管bean方法的名稱來使用方法綁定來處理系統(tǒng)級(jí)事件。

以下代碼顯示了如何實(shí)現(xiàn)SystemEventListener接口。

public class CustomSystemEventListener implements SystemEventListener {
   @Override
   public void processEvent(SystemEvent event) throws 
      AbortProcessingException {
      if(event instanceof PostConstructApplicationEvent){
         System.out.println("Application Started. 
            PostConstructApplicationEvent occurred!");
      }      
   }
}

然后我們可以在faces-config.xml中注冊(cè)系統(tǒng)事件的自定義系統(tǒng)事件偵聽器

<system-event-listener>
   <system-event-listener-class>
      cn.w3cschool.common.CustomSystemEventListener
   </system-event-listener-class>
   <system-event-class>
      javax.faces.event.PostConstructApplicationEvent
   </system-event-class>              
</system-event-listener>

下面的代碼顯示了處理系統(tǒng)級(jí)事件的方法綁定方式。

public void handleEvent(ComponentSystemEvent event){
   data="Hello World";
}

使用上面的方法

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

例子

以下代碼來自MyListener.java。

package cn.w3cschool.common;

import javax.faces.application.Application;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.PostConstructApplicationEvent;
import javax.faces.event.PreDestroyApplicationEvent;
import javax.faces.event.SystemEvent;
import javax.faces.event.SystemEventListener;

public class MyListener implements SystemEventListener{

  @Override
  public void processEvent(SystemEvent event) throws AbortProcessingException {

    if(event instanceof PostConstructApplicationEvent){
      System.out.println("PostConstructApplicationEvent is Called");
    }
    
    if(event instanceof PreDestroyApplicationEvent){
      System.out.println("PreDestroyApplicationEvent is Called");
    }
    
  }

  @Override
  public boolean isListenerForSource(Object source) {
    //only for Application
    return (source instanceof Application);
    
  }
  
}

以下代碼來自demo.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>
      <h2>This is start.xhtml</h2>

 
    </h:body>
</html>
下載 Pre_PostConstructApplicationEvent.zip

運(yùn)行

將生成的WAR文件從目標(biāo)文件夾復(fù)制到Tomcat部署文件夾,并運(yùn)行Tomcat-Install-folder/bin/startup.bat。

Tomcat完成啟動(dòng)后,在瀏覽器地址欄中鍵入以下URL。

http://localhost:8080/simple-webapp/demo.xhtml
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)