新闻正文

JSF中的事件处理

来源:JAVA天堂  J2EE  2007-6-8 01:20:14 网友评论 0 条 字体:[ ] ~我要投稿!

JSF提供一个好处就是事件,例如可以对组件的值的改变提供一个 Listener,和Swing有点相象.

下面以实例说明:

为一个组件定义一个侦听器有两种方法:

第一种方法:侦听方法所在类不用实现任何接口。

public void idChange(ValueChangeEvent event) {
System.out.println("ID的值改变了!");
FacesContext.getCurrentInstance().renderResponse();

}

这个方法只需要定义在BEAN中就可以了。接受一个Event参数。

页面中这样写:

<h:inputText value="#{roseBean.rose.id}" valueChangeListener="#{roseBean.idChange}" onchange="this.form.submit()" immediate="true"/>

第二种方法:侦听方法实现javax.faces.event.ValueChangeListener接口。

public class RoseIdChange implements ValueChangeListener {

public void processValueChange(ValueChangeEvent arg0)
throws AbortProcessingException {
System.out.println("change");

FacesContext.getCurrentInstance().renderResponse();
}
}


页面的写法是这样的:

<h:inputText value="#{roseBean.rose.id}" onchange="this.form.submit()" immediate="true">
<f:valueChangeListener type="cn.xiangyunsoft.web.jsf.listener.RoseIdChange" />
</h:inputText>

在这两种方法中的页面代码中都有 immediate="true" 这个属性,它表示为是即时事件。

在处理方法中都有

FacesContext.getCurrentInstance().renderResponse();
表示这个方法处理完成之后直接跳到JSF生命周期的最后一个阶段。

但是这样还有一个问题就是:

如果在BEAN里面有一个list属性,是从数据库里取出来的数据,在页面上经表格的形式体现,每当这个值变事件发生的时候都会从数据库中重得取数 据,(当然这个BEAN的scop 是request),这样就多一次访问数据库,如果不是在getList()中直接连接数据,通过其他方法取数放到list中,这个值变事件就不会发生, 或发生后表格的数据就没有了。

看来只能用ajax了!



收藏到ViVi   收藏此页到365Key
上一篇:为SWT的StyledText添加Undo/Redo操作(6)
下一篇:快速开发九大要则
用户名:新注册) 密码: 匿名评论 [所有评论]
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
本栏搜索
  • Google
   网站首页 -  网站地图 -  技术学习 -  网站投稿 -  帮助中心
Copyright 2003-2008 www.javah.net All Rights Reserved
2008 如果你喜欢本站 请收藏本站 并推荐给你的朋友一起分享