快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

怎么从JSF的切入点控制JSF

这期内容当中小编将会给大家带来有关怎么从JSF的切入点控制JSF,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

发展壮大离不开广大客户长期以来的信赖与支持,我们将始终秉承“诚信为本、服务至上”的服务理念,坚持“二合一”的优良服务模式,真诚服务每家企业,认真做好每个细节,不断完善自我,成就企业,实现共赢。行业涉及发电机回收等,在成都网站建设全网整合营销推广、WAP手机网站、VI设计、软件开发等项目上具有丰富的设计经验。

JSF框架是一个非常灵活功能非常强大的框架。它的每一个组成部分几乎都是可替换的—可以使用用户自定义的功能实现替换其默认实现。同时提供了很多切入点(可插入机制,类似插件概念),以供用户控制JSF的生命周期各种不同阶段来达到自己的目的。下面介绍几种常见的控制JSF生命周期的切入点。

我们知道JSF把整个生命周期划分成了6个阶段,具体为:restore view(重载视图)阶段,apply request value(应用请求值)阶段,process validation(合法性检查)阶段,update model value(更新模型值)阶段,invork application(事件处理)阶段,render(画面重画)阶段。

怎么切入JSF的生命周期呢?JSF提供了很多方法:

1、从Lifecycle切入。
Lifecycle就是JSF生命周期的控制中心,相当于人的心脏,它的重要性和位置可想而知。在Lifecycle里,主要负责调用上面提到的生命周期的6个阶段的处理。就是这么重要的控制中心,JSF也提供了切入方法以让我们完全替代它。

1)首先,需要在web.xml里定义以下内容,让JSF知道你要使用你自己的Lifecyle实现,而不是默认的Lifecycle实现。

 

  javax.faces.LIFECYCLE_ID 

  yourself.LifecyleImpl 

 

2)上面提到的yourself.LifecyleImpl便是你自己的Lifecyle实现,它必须从javax.faces.lifecycle.Lifecycle虚拟类继承并实现其中的虚拟方法。

因为JSF提供了很多其他方法来让你控制JSF,所以除非特别需要,不建议从Lifecyle的实现直接控制JSF。

2、 从PhaseListener切入。
PhaseListener,简单说来就是对上述6个阶段进行监听的切入点。我们可以通过以下步骤实现:
1)在JSF的配置文件如faces-config.xml里对phase-listener加以配置,告诉JSF我们需要监视它的生命周期。

 

yourself.YourPhaseListener 

  

2)yourself.YourPhaseListener就是你自己的phase-listener实现。它必须实现javax.faces.event.PhaseListener接口。它提供了3个方法,让你完成你想要做的事情:

public void beforePhase(PhaseEvent phaseEvent):在每个阶段处理之前被调用
public void afterPhase(PhaseEvent phaseEvent):在每个阶段处理之后被调用
public PhaseId getPhaseId():告诉JSF你要监视哪个phase。可以指定一个,或全部阶段。


3、 从ActionListener切入。
当一个按钮被按下,或者命令联结被点击时,JSF会在invork application阶段的broadcast event时通过ActionListener调用事先绑定的事件处理方法。如果有用户自定义的ActionListener时,JSF将使用用户自定义ActionListener来代替默认的ActionListener。

用户自定义ActionListener必须实现javax.faces.event.ActionListener接口,并实现其接口方法:public void processAction(ActionEvent actionEvent)。注意,在这个实现方法里,必须调用控件的事件处理方法(JSF Backing Bean中的事件处理方法),并对其返回值做出画面迁移处理和其他你自己的处理等。

import javax.el.ELContext;    
import javax.el.ELException;    
import javax.el.ExpressionFactory;    
import javax.el.MethodExpression;    
import javax.faces.application.Application;    
import javax.faces.application.NavigationHandler;    
import javax.faces.context.FacesContext;    
import javax.faces.event.AbortProcessingException;    
import javax.faces.event.ActionEvent;    
   
ublic class MyActionListener implements javax.faces.event.ActionListener {    
    
   public void processAction(ActionEvent actionEvent) throws AbortProcessingException {    
       FacesContext context = FacesContext.getCurrentInstance();      
        Application application = context.getApplication();      
    
        ELContext elContext = context.getELContext();    
        ExpressionFactory ef = context.getApplication().getExpressionFactory();    
              
        MethodExpression me = ef.createMethodExpression(elContext, "托管bean的方法", Void.TYPE, null);    
            
        String outcome = null;  //outcome      
            
       try{    
            me.invoke(elContext, null);    
          }catch(ELException elexp){    
           Throwable wrapped = elexp.getCause();    
            wrapped.printStackTrace();    
          }    
             
       NavigationHandler navigationHandler = application.getNavigationHandler();      
        navigationHandler.handleNavigation(context, null, outcome);      
              
        //Render Response if needed      
        context.renderResponse();      
            
   }    
    
 }

上述就是小编为大家分享的怎么从JSF的切入点控制JSF了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


名称栏目:怎么从JSF的切入点控制JSF
分享路径:http://6mz.cn/article/poisod.html

其他资讯