JSF生命周期简介

 

 

前沿:对于很多JSF初学者,甚至是有开发经验的开发者,都没有清晰的认识JSF的生命周期已经如何恰当使用JSF构架合适的项目。

 

    在此我需要首先说一下,JSF是一个优秀的框架,并且它相当的成熟,但是请你不要用斧子去切菜,很多时候你会骂“斧子”不锋利。。使用JSF要知道它适合的开发场景

 

    1)JSF不适合以页面展现为目的的web站点:如果你的项目,是一个信息系统,或者是一个合并了强大静态数据的应用系统,那么用JSF稍微有些不妥,因为JSF不能再展现上为你节约更多的人力,反而它会绑架你的思考或者设计方式。

 

    2)JSF虽然提供了强大组件,以及“承诺”的自定义组件开发,但是很多时候组件约束了你的手脚,你会逼着自己用组件去做文章,再者“自定义”组件并没有你想象的那么“温柔”反而很坎坷。。有时候你会怀念html的放荡,JS的“忠诚”。。

 

 

    3)JSF的组件,已经动态消息机制,页面流程统一管理,等等特性,其实时时在想你发出一个信号,“我适合做交互复发,操作繁多的面向用户的应用系统”。

 

 

 

    在你使用JSF之前,你需要了解下面的两种事情,它会让你在“清醒”中开发“清醒”的程序,闭着眼开发JSF,其实你在浪费自己的时间,也在浪费老板为你开出的低廉的“租金”。

 

 

    1.JSF是基于事件驱动的,首先介绍JSF的事件侦听。介绍中我仅仅给大家提供简单的场景。不过我需要首先申明,思考这些事件的时候,你最好先用C/S架构下的模式考虑她的运作模式,再用web下js调度动作的方式去认识执行过程。

 

       1)动作事件:Action Event:普通动作响应

 

          actionEvent是最普通的事件,任何command组件(button,link等,请参见UICommand)通过注册actionListener均可出发此事件侦听响应,简单说,用户有意义的操作,即可触发。


       2)即时事件:Immediate Event:立即处理,不验证/转换/更新模型值(即bean不会保存属性)

 

         即时事件,立即触发,在JSF生命周期中,让恢复试图之后,获取请求值,立即触发。验证、转化、更新模型值被略过,当然更多的情况下,你需要一个为被注册的UI组件binding到后台bean中,别忘了,你使用即时事件的初衷是什么??就是我只想让程序关注此组件,并排斥其他组件或者级联组件的操作。场景:单一表单中,使用“检测用户名是否存在”。立即时间,常用来做bean层面即时服务,以执行action为主要目的。


       3)值改变事件:Value Change Event:选择UI值改变后,级联调度.如果国际化中选择语言.

 

          值改变事件,如果一个输入(UIInput)、选择(UISelects)组件的值发生改变,将会执行的侦听。所谓的值改变,就是表单中local值和submit值发生偏移,local值就是页面渲染时上一个生命周期中传递的值,简单说就是表单中原来展示的值(server端生成的组件值,在周期中编码进去)。。submit值,就是面向用户或者操作者主动输入的客户端值。

 

          比如:表单展示时,server端为一个下拉菜单赋值为1(local值),如果用户选择了2(submit值).请你用相同的思维去考虑输入框。

 

          如果值改变,那么就会被执行,最好的场景就是:国际化中选择语言,然后把最新的语言元素,广播到整个站点。

 


       4)阶段事件:Phase Event:监听响应的JSF生命周期

 

          JSF的运行大致分为6个阶段,具体如下(JSF生命周期)。当然这类事件,可以注册到组件,但是更多的时候,用来监控站点中特殊组件的数据操作。

 

 

 

   2.JSF生命周期

 

      1)恢复视图(Restore View)
        根据请求访问的视图ID(页面地址),重建JSF 组件DOM树。如果JSF页面是第一次访问,也即是试图ID在内存中没没有存根,那么JSF会在内存中构建JSF组件的DOM树。但是组件并没有值,只是一个模子。。
     2)应用请求值(Apply Request Values)
      JSF组件获取请求中的属于自己的值,包括Local值,和submit值.同时处理转换,转换成功,更新local值(submit转换结果),当然过程没有那么简单,JSF处理器有自己的一套解码过程。
     3) 执行验证


         如果组件注册验证器,依次执行验证.


     4)更新模型值:如果所有的组件本地值转换验证等均成功,此时JSF就会根据EL处理关联的bean,并更新bean绑定值.在此处JSF会根据EL绑定加载配置的后台bean。

     5)调用应用:调用注册的侦听器,然后执行事件驱动,获取下一个视图。侦听器此时可以有效的侦听到UI组件的各项数据,事件驱动部分即action可以有效的获取被更新的后台bean数据。执行自己的业务逻辑。

 

     6)渲染响应(Render Response)
    到此请求处理结束,根据导航规则,渲染响应的页面.依次执行…

 

 

 

    在此我需要罗嗦一句,每当我看到员工把业务逻辑写在actionListener里的时候,就有点窝火。actionListener真正目的是让开发者通过获取触发事件的组件,逐末求源,级联操作其他组件(binding的使用),或者定性的操作触发事件的组件数据,listener说白了,就是处理面向UI的数据操作。从更新模型之后的binding的UI中获取三方附属数据,如触发action的组件的style,状态,国际化,http等。而不是让用来做业务处理的。action方法及事件驱动程序部分,才是用来做业务服务的,然后指定导航。。。

 

    如果谁在乱写,小心没收你的“小弟弟”。。。。。。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Spring Boot整合JSF,你可以按照以下步骤进行操作: 1. 添加JSF依赖:在pom.xml文件中,添加JSF的依赖项,如下所示: ```xml <dependency> <groupId>javax.faces</groupId> <artifactId>javax.faces-api</artifactId> <version>2.3</version> </dependency> ``` 2. 配置JSF Servlet:在Spring Boot的配置类中,添加以下配置,以将JSF Servlet映射到`/javax.faces`路径下: ```java import javax.faces.webapp.FacesServlet; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JsfConfig { @Bean public ServletRegistrationBean<FacesServlet> facesServletRegistration() { ServletRegistrationBean<FacesServlet> registration = new ServletRegistrationBean<>(new FacesServlet(), "*.jsf"); registration.setName("FacesServlet"); return registration; } } ``` 3. 配置JSF View Resolver:在Spring Boot的配置类中,添加以下配置,以将JSF视图解析为`.xhtml`文件: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration public class JsfConfig { @Bean public ViewResolver internalResourceViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setViewClass(JsfView.class); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".xhtml"); return resolver; } } ``` 4. 创建JSF视图:在`/WEB-INF/views/`目录下创建JSF视图文件,例如`hello.xhtml`,并在其中定义JSF组件。 现在,你已经成功地将Spring Boot与JSF整合起来了。你可以在JSF视图中使用JSF的标签和组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值