菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻

JSF 预构建应用程序事件示例

原创
05/13 14:22 更新

JSF教程 - JSF预构建应用程序事件示例

以下代码显示如何处理应用程序级事件。

JSF在JSF应用程序生命周期中有处理应用程序特定任务的系统事件侦听器。

  • 应用程序启动时触发PostConstructApplicationEvent。它可以用于在应用程序启动后执行初始化任务。
  • 应用程序即将关闭时,PreDestroyApplicationEvent触发。它可以用于在应用程序即将关闭之前执行清除任务。
  • PreRenderViewEvent在显示JSF页面之前触发。它可用于验证用户并提供对JSF View的受限访问。

我们可以通过实现SystemEventListener接口来处理系统级事件,并在faces-config.xml中注册system-event-listener类。

我们还可以通过传递f:event的监听器属性中的托管bean方法的名称来使用方法绑定来处理系统级事件。

以下代码显示了如何实现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中注册系统事件的自定义系统事件侦听器

<system-event-listener>
   <system-event-listener-class>
      com.lmonkey.common.CustomSystemEventListener
   </system-event-listener-class>
   <system-event-class>
      javax.faces.event.PostConstructApplicationEvent
   </system-event-class>              
</system-event-listener>

下面的代码显示了处理系统级事件的方法绑定方式。

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

使用上面的方法

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

例子

以下代码来自MyListener.java。

package com.lmonkey.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>

运行

将生成的WAR文件从目标文件夹复制到Tomcat部署文件夹,并运行Tomcat-Install-folder/bin/startup.bat。

Tomcat完成启动后,在浏览器地址栏中键入以下URL。

http://localhost:8080/simple-webapp/demo.xhtml
综合评分:9.9 评分 请对本文进行纠错,及学习过程中有困难疑惑可在此进行讨论