posts - 0,comments - 0,trackbacks - 0

          寫了一個(gè)簡(jiǎn)單至極的JSF頁(yè)面,如下:

          <%@ page language="java" pageEncoding="UTF-8"%>
          <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
          <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
          <html>
              <head>
                  <title>Hello</title>
              </head>

              <body>
                  <f:view>
                      <h:form>
                          <h:commandButton actionListener="#{testBean.sayHello}" value="Hello!">
                         
                              <f:setPropertyActionListener target="#{testBean.userName}"
                                  value="zhangsan" />
                                 
                              <f:actionListener type="myex2.lc.MyActionListener"/>
                             
                          </h:commandButton>
                      </h:form>
                  </f:view>
              </body>
          </html>

           

           

          對(duì)應(yīng)的Bean如下:

           

          package myex2.lc;

          import javax.faces.event.ActionEvent;

          public class TestBean {
             
              private String userName;

              public String getUserName() {
                  return userName;
              }

              public void setUserName(String userName) {
                  this.userName = userName;
              }   
             
              public void sayHello(ActionEvent evt) {
                  System.out.println("sayWord: Hello, " + userName);
              }
          }

          控制臺(tái)上的輸出結(jié)果會(huì)是什么呢?答案如下:

          sayWord: Hello, null
          MyActionListener: Hello, zhangsan

           

          為什么兩個(gè)ActionListener(sayHello方法和 <f:actionListener type="myex2.lc.MyActionListener"/>)的輸出會(huì)不一樣?

          原因在于<f:setPropertyActionListener>也是一個(gè)ActionListener,總共3個(gè)ActionListener執(zhí)行的順序不同。

           

          正常情況下,attribute中聲明的方法ActionListener,總比<f:actionListener>類的ActionListener先執(zhí)行;

          而后<f:actionListener>類的ActionListener再按聲明的先后順序依次執(zhí)行。


          所以在這個(gè)例子里面執(zhí)行的順序是:#{testBean.sayHello} -> <f:setPropertyActionListener> -> <f:actionListener>。

          同時(shí)也可看出,對(duì)于attribute類的ActionListener,通過(guò)<f:setPropertyActionListener>傳遞參數(shù)似乎并不是一個(gè)好辦法,還需要構(gòu)建ValueExpression去求值,比較麻煩。

          而可以采用<f:attribute>代替,再用ActionEvent的getComponent() -> getAttributes()解析出參數(shù),相對(duì)方便一些。

          action屬性總是在各類ActionListener執(zhí)行之后才被調(diào)用,因此沒(méi)有此類干擾。

          以上情況,也可推及ValueChangeListener。



          摘自http://blog.csdn.net/gengv/article/details/4211794

          posted on 2012-12-12 15:52 Kevin_YK 閱讀(353) 評(píng)論(0)  編輯  收藏 所屬分類: JSF
          主站蜘蛛池模板: 小金县| 靖西县| 三原县| 彩票| 白玉县| 武平县| 永吉县| 东山县| 怀化市| 开阳县| 左贡县| 镇康县| 玉门市| 本溪市| 靖安县| 勃利县| 海宁市| 牙克石市| 吉林省| 达日县| 旬邑县| 西华县| 东乌珠穆沁旗| 棋牌| 曲靖市| 淳安县| 临夏县| 乐陵市| 建昌县| 宁远县| 临江市| 桂阳县| 山阳县| 珲春市| 静宁县| 科尔| 南皮县| 广饶县| 乃东县| 彭山县| 甘洛县|