隨筆-112  評論-73  文章-0  trackbacks-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了!


          Technorati :

          posted on 2007-06-07 10:06 Libo 閱讀(817) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 普宁市| 娄烦县| 织金县| 克拉玛依市| 玉环县| 曲靖市| 色达县| 抚宁县| 鸡泽县| 金溪县| 玉环县| 宿松县| 汪清县| 桦甸市| 宁安市| 含山县| 乌拉特前旗| 满洲里市| 南宫市| 江北区| 永新县| 禄劝| 宣汉县| 大余县| 娱乐| 武穴市| 广平县| 永福县| 肃南| 灌云县| 宣恩县| 沙雅县| 和龙市| 高青县| 宾阳县| 西昌市| 溆浦县| 沙洋县| 平远县| 桂平市| 恩施市|