<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 5,  comments - 7,  trackbacks - 0

    JSF的一個核心就是事件與監聽。JSF事件分為以下幾種:
    1、Value-change events(值改變事件)

    <h:inputText valueChangeListener="#{myForm.processValueChanged}"/>
    <h:panelGrid binding="#{myForm.changePanel}" rendered="false">

    </h:panelGrid>


     

    public void processValueChanged(ValueChangeEvent event)
    {
    HtmlInputText sender 
    =
     (HtmlInputText)event.getComponent();
    sender.setReadonly(
    true
    );
    changePanel.setRendered(
    true
    );
    }

    當inputText的值改變的時候會觸發processValueChanged事件,此事情內部通過參數,獲取HtmlInputText的控件,然后設定readonly,同時設定panelGrid的模型changePanel的屬性,因為panelGrid綁定了changePanel這個模型。

    2、Action events(動作事件)

    <h:commandButton type="submit" value="Login" action="success"
    immediate
    ="true"/>

    上面這個是靜態outcome事件,在faces-config.xml中配置相應的屬性后,點擊該按鈕會轉向相應的方法。

    <h:commandButton value = "Test Action Listener" actionListener = "#{testActionListener.doSomeAction}" />

    如果添加了actionListener屬性的話,點擊之后,在轉向其他頁面之前,會觸發指定的事件,處理之后再轉向。
    這里的doSomeAction方法的聲明是void doSomeAction(ActionEvent actionEvent)。

    <h:commandButton type="submit" value="Login"
    action
    ="#{loginForm.login}"/>

    上面這個是動態outcome事件,當點擊該按鈕之后會直接觸發loginForm中的login事件,login事件返回的是一個字符串,在login處理完相應操作之后需要返回一個屬性中已經配置過的字符串,例如success,然后JSF根據faces-config.xml中的配置,跳轉到相應的頁面。login的聲明一般是String login();

    當然也可以通過程序來添加監聽器,不過監聽器類需要實現ActionListener接口:

    UIComponent myComponent = new UIComponent();
    myComponent.addActionListener(
    new
     TestActionListener());
    myComponent.addActionListener(
    new
     CustomActionListener());


    3、Data model events(數據模型事件)

    FacesContext facesContext = FacesContext.getCurrentInstance();
    dataTable 
    =
     (HtmlDataTable)facesContext.getApplication().createComponent(
    HtmlDataTable.COMPONENT_TYPE);
    DataModel myDataModel 
    = new
     ResultSetDataModel(myResultSet);
    myDataModel.addDataModelListener(
    new
     DataModelListener()
    {
    public void
     rowSelected(DataModelEvent e)
    {
    FacesContext.getCurrentInstance().getExternalContext().
    log(
    "row selected:" +
     e.getRowIndex());
    }

    }
    );
    dataTable.setValue(myDataModel);

    將上面的代碼放入初始化程序中,當行的選擇改變的時候就會觸發相應的日志打印。
    這是因為這段代碼給dataTable控件定義了一個數據模型,數據和相應的事件全部存在這個數據模型里面,然后將dataTable與這個模型進行綁定即可使用它所有的數據和事件。點擊dataTable上面的一行自然也就會出發相應的行選擇事件。

    4.Phase events(階段事件)

    這個事件是為了捕捉一些階段和過程而設定的,有以下幾個階段可以捕捉:

     

    ANY_PHASE 任一階段
    APPLY_REQUEST_VALUES  請求處理階段的應用請求值階段
    INVOKE_APPLICATION 請求處理階段的調用程序階段
    PROCESS_VALIDATIONS 請求處理階段的處理驗證階段
    RENDER_RESPONSE  請求處理階段的描述響應階段
    RESTORE_VIEW 請求處理階段的恢復視圖階段
    UPDATE_MODEL_VALUES 請求處理階段的更新模型值階段

     

    具體可以參考http://java.sun.com/javaee/javaserverfaces/1.1_01/docs/api/javax/faces/event/PhaseId.html

    通過設定在實現類中設定相應的PhaseId以及添加到faces-config.xml中就可以捕捉相應階段事件并添加響應的代碼

    實現類

     

    import javax.faces.event.PhaseEvent;
    import
     javax.faces.event.PhaseId;
    import
     javax.faces.event.PhaseListener;

    public class CustomPhaseListener implements
     PhaseListener
    {    
        
    public
     CustomPhaseListener()
        
    {
        }


        
    public void afterPhase(PhaseEvent event)
        
    {
            System.out.println(
    "After Phase->" +
     event.getPhaseId());    
        }


        
    public void beforePhase(PhaseEvent event)
        
    {
            System.out.println(
    "Before Phase->" +
     event.getPhaseId());
        }


        
    public PhaseId getPhaseId()
        
    {
            
    return PhaseId.ANY_PHASE;//選擇事件標識的常量,此為任一階段

        }
        
    }


    在faces-config.xml中添加

    <lifecycle>
        
    <phase-listener>
            net.javabeat.articles.jsf.events.actions.TestActionListener
        
    </phase-listener>
    </lifecycle>


    當然可以添加無限個的監聽器

    <lifecycle>
        
    <phase-listener>PhaseListener1</phase-listener>
        
    <phase-listener>PhaseListener2</phase-listener>
    </lifecycle>


    下面是請求處理的生命周期,大家可以直觀的看一下各個階段執行順序:
     
    各個階段的說明以及所能觸發的事件
     

    posted on 2008-11-23 00:37 Vincent-chen 閱讀(367) 評論(0)  編輯  收藏 所屬分類: JSF
    主站蜘蛛池模板: 亚洲爆乳成av人在线视菜奈实| 四虎影视在线看免费观看| 亚洲中文字幕无码一去台湾| 国产成人亚洲精品电影| 国产在线一区二区综合免费视频| 国产h视频在线观看免费| 国产成人亚洲影院在线观看| 亚洲看片无码在线视频| 久久久精品午夜免费不卡| 亚洲国产另类久久久精品黑人| 亚洲大码熟女在线观看| 国产精品另类激情久久久免费| 97se亚洲综合在线| 成人免费ā片在线观看| 暖暖日本免费在线视频| 亚洲综合亚洲国产尤物| 成全视频免费观看在线看| 伊在人亚洲香蕉精品区麻豆| 亚洲一级免费视频| 久久精品国产影库免费看| 亚洲精品国产成人99久久| 国产一二三四区乱码免费| 亚洲Av熟妇高潮30p| 国产精品极品美女自在线观看免费 | 日韩免费无码一区二区视频| 春暖花开亚洲性无区一区二区| 成人免费一级毛片在线播放视频| 亚洲中文无码永久免费| 三年片在线观看免费观看高清电影| 亚洲AV人无码综合在线观看| 18成禁人视频免费网站| 亚洲AV无码不卡在线播放| 中文字幕在线观看免费| 亚洲熟妇无码爱v在线观看| 午夜男人一级毛片免费| 亚洲人片在线观看天堂无码| 97无码免费人妻超级碰碰碰碰| 美女隐私免费视频看| 亚洲毛片不卡av在线播放一区| 日本在线观看免费高清| 亚洲一级黄色视频|