千家信息网

怎么从JSF的切入点控制JSF

发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,这期内容当中小编将会给大家带来有关怎么从JSF的切入点控制JSF,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JSF框架是一个非常灵活功能非常强大的框架。它的每一个
千家信息网最后更新 2024年11月30日怎么从JSF的切入点控制JSF

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

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.createMethod_Expression(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了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

阶段 方法 处理 控制 周期 生命 切入点 就是 用户 事件 内容 接口 重要 功能 框架 画面 分析 监视 配置 不同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 松江区个人软件开发诚信经营 工业园区正规网络技术服务价格 广联达账号显示服务器异常 天堂网络技术有限公司 怎么连接数据库用eclipse 软件开发小规模企业年最高销售额 ccf网络安全竞赛 家庭云盘能否变成云服务器 保定网络技术服务有限责任公司 中宁县办公软件开发公司 杭州闪营网络技术有限公司 装机模拟器能装服务器吗 软件开发合同范本版权归属 武汉美股软件开发 销售数据库怎么建立 开鲁县网络安全宣传 湛江手机软件开发订制 全球网络技术大奖 交换机网络安全告警 初二政治书网络安全 sql数据库出售信息 违反网络安全的法律依据 崇明区软件开发 网络安全现状论文范文参考 软件开发人员英语翻译 宇视科技是互联网大公司吗 最有价值的网络安全书籍 村屯通信网络安全管理制度 装机模拟器能装服务器吗 懂车帝软件开发花了多少钱
0