JSF学习笔记四

  事件处理:
1.动作事件
  Bean中方法verify(ActionEvent e)接受一个ActionEvent对象,jsp页面中如下编写:
  <h:commandButton value="提交" actionListener="#{user.verify}" action="#{user.outcome}">

  注册多个ActionListener:
LogHandle.java 和 VerifyHandle.java 都实现了ActionListener接口。我们使用<f:actionListener>标签向组件注册事件。如:
<h:commandButton value="提交" action="#{user.outcome}">
  <f:actionListener type="com.zdx.LogHandle"/>
  <f:actionListener type="com.zdx.VerifyHandle"/>
</h:commandButton>

2.即时事件
  是指JSF试图组件在取得请求中该取得的值之后,立即处理指定的事件,而不再进行后续的转换器处理、验证器处理、更新模型值等流程。
  基本流程:
  1>重建试图
    依客户端传来的session数据或服务器段上的session数据,组建JSF试图组件。
  2>套用请求值
    JSF试图组件各自获取请求中属于自己的值,包括旧的值和新的值。
  3>执行验证
    转换为对象并进行验证
  4>更新模型值
    更新bean或相关的模型值
  5>唤起应用程序
    唤起应用程序相关逻辑
  6>绘制响应页面
    对先前的请求处理完之后,产生页面以反应客户端执行结果。
对于动作事件来说,组件的动作事件是在套用请求值阶段就生成了ActionEvent对象,但相关的事件处理并不是马上进行,ActionEvent会被先列入队列,然后必须经过验证、更新阶段之后才处理队列中的事件。
    我们可以设定组件在套用请求值之后立即被执行,并跳过后续的阶段,直接进入页面绘制以响应请求,对于JSF的input和command组件,都有一个immediate属性,只要将其设置为true就可以了。

3.值变事件
  JSF输入组件的值改变后触发的事件,二种处理方式:
  方法一:直接设置JSF输入组件的valueChangeListener属性
<h:selectOneMenu value="#{user.local}"
   onchange="this.form.submit();"
   valueChangeListener="#{user.changeLocale}">
   <f:selectItem itemValue="zh_CN" itemLabel="Chinese"/>
   <f:selectItem itemValue="en" itemLabel="Englist"/>
   </h:selectOneMenu>
  方法二:实现javax.faces.event.ValueChangeListener接口。
在jsp页面中时使用<f:valueChangeListener type="com.zdx.MyValueChangeListener">标签

4.Phase事件
  如果我们想在每个阶段前后扑捉这个事件以进行一些处理,我们可以实现javax.faces.event.PhaseListener接口,并向javax.faces.lifecycle.Lifecycle登记这个Listener,以在适当的时候通知事件的发生。必须实现的三个方法为:getPhaseId()、beforePhase()、afterPhase(),其中getPhaseId()传回一个PhaseId对象,代表Listener想要被通知的时机。
  faces-config.xml中的配置如下:
<lifecycle>
<phase-listener>
com.zdx.myPhaseListener
</phase-listener>
                 </lifecycle>
 

你可能感兴趣的:(bean,应用服务器,jsp,xml,JSF)