gembin

          OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

          HBase, Hadoop, ZooKeeper, Cassandra

          Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

          There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

          About Me

           

          學習新Ajax技術--Dynamic Faces

          引言: 讀此篇文章時,假設您已經具備了JavaServer Faces Technology的基礎知識.
          本文從Dynamic Faces所提供的一個例子出發.


          Backing Bean
          FruitInfoBean .java
          package simpleDynamicFaces;

          import java.util.ArrayList;
          import java.util.HashMap;
          import java.util.Map;

          import javax.faces.context.FacesContext;
          import javax.faces.event.ValueChangeEvent;
          import javax.faces.model.SelectItem;


          public class FruitInfoBean {

              
          /** Creates a new instance of FruitInfoBean */
              
          private Map<Object, Object> fruitNamesMap = new HashMap<Object, Object>();
              
          private String fruit = null;
              
          private String variety = null;
              
          private String varietyInfo = null;

              
          public FruitInfoBean() {
                  
          this.init();
              }

              
          private void init() {
                  FacesContext context 
          = FacesContext.getCurrentInstance();
                  System.out.println(
          "Locale:" + context.getViewRoot().getLocale());
                  fruit 
          = "Pear";
                  variety 
          = "Aurora";
                  fruitNamesMap.put(
          "Pear""Aurora,Bartlet,Bosc,Comice,Delicious");
                  fruitNamesMap.put(
          "Apple""Adanac,Akane,Ballarat,Braeburn,Fuji,Gala");
                  fruitNamesMap.put(
          "Orange""Berna,Hamlin,Moro,Navel,Valencia");
                  fruitNamesMap.put(
          "Peach",
                          
          "Brighton,Clingstone,Contender,Eden,Freestone");
              }

              
          /*
               * Handler method called when user selects a variety from the menu. This
               * method updates the variety component model value and sets the varietyInfo
               * model value to the appropriate message.
               
          */
              
          public String updateVariety(ValueChangeEvent e) {
                  String newVariety 
          = (String) e.getNewValue();
                  String currentFruit 
          = getFruit();
                  setVarietyInfo(
          "Information updated:" + newVariety + " Old:"
                          
          + currentFruit);
                  
          return null;
              }

              
          public String getFruit() {
                  
          return this.fruit;
              }

              
          public void setFruit(String fruit) {
                  
          this.fruit = fruit;
              }

              
          protected ArrayList<SelectItem> fruits = null;

              
          public ArrayList<SelectItem> getFruits() {

                  fruits 
          = new ArrayList<SelectItem>();
                  fruits.add(
          new SelectItem("Pear""Pear"));
                  fruits.add(
          new SelectItem("Apple""Apple"));
                  fruits.add(
          new SelectItem("Orange""Orange"));
                  fruits.add(
          new SelectItem("Peach""Peach"));

                  
          return fruits;
              }

              
          public String getVariety() {
                  
          return this.variety;
              }

              
          public void setVariety(String variety) {
                  
          this.variety = variety;
              }

              
          protected ArrayList<SelectItem> varieties = null;

              
          public ArrayList<SelectItem> getVarieties() {
                  varieties 
          = new ArrayList<SelectItem>();
                  String[] fruitVarieties 
          = fruitNamesMap.get(this.fruit).toString()
                          .split(
          ",");
                  
          for (int i = 0; i < fruitVarieties.length; i++) {
                      varieties.add(
          new SelectItem(fruitVarieties[i], fruitVarieties[i]));
                  }
                  
          return varieties;
              }

              
          /*
               * Handler method for the event of selecting a fruit. This method sets the
               * model value for the variety component and sets the varietyInfo model
               * value to the appropriate message.
               
          */
              
          public void changeFruit(ValueChangeEvent e) {
                  String fruitValue 
          = (String) e.getNewValue();
                  String[] varieties 
          = fruitNamesMap.get(fruitValue).toString()
                          .split(
          ",");
                  setVarietyInfo(
          "Information:" + (varieties[0]));
                  setVariety(varieties[
          0]);
              }

              
          public String getVarietyInfo() {
                  
          return this.varietyInfo;
              }

              
          public void setVarietyInfo(String varietyInfo) {
                  
          this.varietyInfo = varietyInfo;
              }

              
          /*
               * The following code is used with the installDeferredAjaxTransaction use
               * case
               
          */
              
          private String fruitQuiz = null;

              
          public String getFruitQuiz() {
                  
          return this.fruitQuiz;
              }

              
          public void setFruitQuiz(String fruit) {
                  
          this.fruitQuiz = fruit;
              }

          }

          fireAjaxTx.jsp
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
             "http://www.w3.org/TR/html4/loose.dtd"
          >
          <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
          <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
          <%@ taglib prefix="jsfExt"  uri="http://java.sun.com/jsf/extensions/dynafaces"%>

          <f:view>
              
          <html>
              
          <head>
              
          <title>Fruit Varieties</title>
              
          <jsfExt:scripts />
              
          </head>
              
          <body bgcolor="white">

              
          <h:form prependId="false" id="form">

                  
          <h1>Fruit Varieties</h1>
                  
          <h:panelGrid columns="2" cellpadding="4">
                      
          <h:outputText value="Select a fruit:" />
                      
          <h:outputText value="Select a variety:" />
                      
          <h:selectOneRadio id="fruit" value="#{fruitInfoBean.fruit}"
                          onclick
          ="DynaFaces.fireAjaxTransaction(this, { execute: 'fruit'});"
                          valueChangeListener
          ="#{fruitInfoBean.changeFruit}">
                          
          <f:selectItems value="#{fruitInfoBean.fruits}" />
                      
          </h:selectOneRadio>

                      
          <h:selectOneMenu id="variety" value="#{fruitInfoBean.variety}"
                          onchange
          ="DynaFaces.fireAjaxTransaction(this, { execute: 'variety' });"
                          valueChangeListener
          ="#{fruitInfoBean.updateVariety}">
                          
          <f:selectItems value="#{fruitInfoBean.varieties}" />
                      
          </h:selectOneMenu>

                  
          </h:panelGrid>
                  
          <h:outputText id="varietyInfo" value="#{fruitInfoBean.varietyInfo}" />

              
          </h:form>

              
          </body>
              
          </html>
          </f:view>

          其中的DynaFaces.fireAjaxTransaction方法由jsf-extensions-dynamic-faces.jar里的com_sun_faces_ajax.js定義,這個方法可以在JSF組件級別上執行AJAX異步更新.

          使用fireAjaxTransaction:
          1.在JSF組件的標簽里加JavaScript 事件屬性,如:onClick="DynaFaces.fireAjaxTransaction(paras)"
          2. 在DynaFaces.fireAjaxTransaction加上paras,以便可以傳遞一些參數到Server.


          execute: 'fruit'的意思是:Id為fruit的JSF組件(包括這個組件的所有Children),將Go Through JSF Life Circle的execute部分. 在這部分生命周期后,當前頁面所有JSF組件將會通過Ajaxre-render(這里是默認行為,因為沒有指定render屬性), 其中execute生命周期部分所做的工作如下:轉換和驗證數據,更新數據模型和處理Action事件. value-change事件屬于fruit組件,所以當發出AJAX請求時,該事件也會被處理,從而達到更新模型數據的目的.

          常用的屬性:
          1. execute: A JavaScript String specifying which JSF component id's to process.  

          2. immediate: Not really needed, but if there was validation on the field in "execute" immediate would skip the validation. 

          3. inputs: The values sent to the server.  This may be different than the components processed.  

          4. render: This specifies which area(s) of the screen should be updated with the response.  In this case the 
          <div> around our message text.


          所需的Lib如下:


          有關Dynamic Faces的包可以從這里下載:https://jsf-extensions.dev.java.net/servlets/ProjectDocumentList

          posted on 2008-03-11 17:32 gembin 閱讀(810) 評論(0)  編輯  收藏 所屬分類: JSFAjax

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類(440)

          隨筆檔案(378)

          文章檔案(6)

          新聞檔案(1)

          相冊

          收藏夾(9)

          Adobe

          Android

          AS3

          Blog-Links

          Build

          Design Pattern

          Eclipse

          Favorite Links

          Flickr

          Game Dev

          HBase

          Identity Management

          IT resources

          JEE

          Language

          OpenID

          OSGi

          SOA

          Version Control

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          free counters
          主站蜘蛛池模板: 宕昌县| 平度市| 望奎县| 长沙市| 四会市| 偃师市| 金山区| 六盘水市| 弋阳县| 桂平市| 定南县| 黄陵县| 锡林郭勒盟| 溧阳市| 东阿县| 龙里县| 剑河县| 盐源县| 镇康县| 万盛区| 曲阜市| 土默特左旗| 汝阳县| 拜泉县| 翼城县| 黄浦区| 阜康市| 郧西县| 安国市| 清水县| 上饶县| 敦煌市| 大安市| 万全县| 晋江市| 米脂县| 伊金霍洛旗| 应城市| 兴义市| 丹棱县| 丁青县|