JSF事件处理
来源:互联网 发布:淘宝客返利要不要关闭 编辑:程序博客网 时间:2024/05/10 06:19
JSF是基于GUI式的事件处理机制的,但是由于http的无状态性,使得JSF的事件处理机制多少与传统的桌面程序有些差别。
JSF中事件的处理给页面上的每一个按钮都绑定一个动作方法,实际上JSF会为其自动产生一个「预定义的ActionListener」来处理事件,根据方法的返回值和导航文件判断想要跳转的页面。
jsf的页面处理流程:
1、重构jsf组建
依据客户端传过来的session数据或服务器上的session数据,重建jsf视图组件。
2、套用请求值
jsf视图组件各自获得请求中的属于自己的值,包括旧的值与新的值
3、执行验证
4、更新模型值(更新bean或相关的模型值)
5、唤起应用程序(执行应用程序逻辑)
6、绘制相应页面
但是jsf由于不同的需求,主要分4种事件
1、动作事件
这是一个完整的jsf处理流程,页面的大部分提交按钮就使用的是这个事件,有的时候多个按钮访问同一个事件,我们需要获得事件的来源,这个时候我们叫应该调用ActionEvent对象
public void verify(ActionEvent e) {
if(!name.equals("justin") ||
!password.equals("123456")) {
errMessage = "名称或密码错误" + e.getSource();
outcome = "failure";
}
else {
outcome = "success";
}
}
public String outcome() {
return outcome;
}
jsp调用代码
<h:commandButton value="送出" actionListener="#{user.verify}" action="#{user.outcome}"/>
调用时,jsf在套用请求值时会判断是否制定了actionListener,如果没有指定则会产生预定义的ActionListener和ActionEvent对象,并将其压入队列,继续执行验证和更新模型bean。
2、即时事件
有的时候我们需要在不需要验证和设置模型bean值的时候处理事件,例如仅仅是想改变一下显示的语言,他会跳过数据验证和更新模型值,直接唤起应用程序,绘制相应页面。
调用方法:<h:commandButton value="#{msgs.Text}" immediate="true" actionListener="#{user.changeLocale}"/>
3、值变事件
值变事件是指在用户改变了输入组件的值之后提交表单,他会丢出一个ValueChangeEvent对象,如果想处理这个时间有两种方式
一是直接设定JSF输入组件的valueChangeListener属性
<h:selectOneMenu value="#{user.locale}"
onchange="this.form.submit();"
valueChangeListener="#{user.changeLocale}">
<f:selectItem itemValue="zh_CN" itemLabel="Chinese"/>
<f:selectItem itemValue="en" itemLabel="English"/>
</h:selectOneMenu>
另一个方法是实现javax.faces.event.ValueChangeListener接口,并定义其processValueChange()方法
public class SomeListener implements ValueChangeListener {
public void processValueChange(ValueChangeEvent event) {
....
}
....
}
4、phase事件 就是对每一个事件以上不同的处理层次追加一个监听。
PhaseListener有三个必须实现的方法getPhaseId()、beforePhase()与afterPhase(),其中getPhaseId()传回一个PhaseId对象,代表Listener想要被通知的时机,可以设定的时机有:
PhaseId.RESTORE_VIEW
PhaseId.APPLY_REQUEST_VALUES
PhaseId.PROCESS_VALIDATIONS
PhaseId.UPDATE_MODEL_VALUES
PhaseId.INVOKE_APPLICATION
PhaseId.RENDER_RESPONSE
PhaseId.ANY_PHASE
其中PhaseId.ANY_PHASE指的是任何的阶段转换时,就进行通知;您可以在beforePhase()与afterPhase()中编写阶段前后编写分别想要处理的动作
需向face-config.xml注册
<faces-config>
<lifecycle>
<phase-listener>
onlyfun.caterpillar.ShowPhaseListener
</phase-listener>
</lifecycle>
......
</faces-config>
- JSF事件处理 (4)
- JSF事件处理
- JSF事件处理
- JSF事件处理
- JSF---->事件处理---动作事件
- JSF---->事件处理----实时事件
- JSF---->事件处理---Phase 事件
- 关于jsf中的事件处理
- JSF——事件处理
- JSF---->事件处理--值变事件
- JSF 事件
- JSF事件
- jsf-即时事件
- jsf-四种事件
- JSF实时事件
- JSF事件监听
- JSF Gossip: 动作事件
- JSF事件类型
- 03-04 创建和编辑AutoCAD实体(四) 编辑二维命名对象 (8)
- JQ 上传插件
- 几个典型的内存拷贝及字符串函数实现
- 关于完成广告系统后的个人总结
- spool 脱机命令
- JSF事件处理
- 学习Linux:用read()系统调用读取文件
- 快速求小于n且与n互素的个数
- java运行过程
- hello
- 使用sed取字符串并添加到新加行
- myeclipse安装maven2
- nfs 挂载二
- 如何开发ORACLE存储过程(转)