linugb118--java space

          Java

          JSF 探索 (1)

          JSF 探索 (1)

          雖然JSF已經出來好久了,而且好像感覺不是很潮流的框架了,然后當我看見他的時候,我覺得他的思想很好,而且隨著手機等client多樣化的出現,我相信人們
          必將重新拾起JSF的思想。

          JSF說白了是事件驅動,web以前的時代我估計大部分都是事件驅動的開發模式,而web的出現,使人們更多關注瀏覽器上面的渲染,以及servlet和http的操作上。
          web2.0的出現,使人們感覺在瀏覽器上的操作更像以前c/s結構的操作,而手機client的熱捧更能體現未來多種客戶端訪問server的模式即將到來,也許大家開始
          在想如何做新的框架,其實這種想法已經out了,JSF里面早就有這個思想了,你只需要去關注JSF不就ok了?

          任何《* in action》的書總是讓programmer 興奮,同樣JSF in Action也是一本不錯的書,讓我們一起去看看它把。

          1.JSF 關鍵詞
          UI component :靜態對象,它保存在server端,其實本身UI Component是javabean對象,他具有javabean具備的屬性,methods和events。通常多個component被組織為一個頁面的視圖

          Renderer:渲染器,renderer被用作渲染component,以及將用戶的輸入轉換為component的值。特別當不同類型的client端,比如手機,那么對應的就有手機相應格式的renderer。

          Validator:負責驗證用戶輸入值的可靠性,單個UI component可以對應一個或多個Validator.

          Backing beans:后臺的javabean,做一些邏輯處理什么的,存儲component的值,實現事件監聽器,他可以引用component。

          Converter:顯示轉換器,比如時間格式的顯示,一個component可以對應一個converter

          Events and listeners:事件和監聽器

          Messages:顯示給用戶的信息

          Navigation:一個頁面到另外一個頁面的向導。


          2.JSF請求的六個階段
          Phase 1: Restore View
          構建視圖頁面供用戶輸入或查看

          Phase 2: Apply Request Values
          獲取請求值

          Phase 3: Process Validations
          可以對請求值進行驗證

          Phase 4: Update Model Values
          更新back bean 的值

          Phase 5: Invoke Application
          調用應用,執行相應的監聽器

          Phase 6: Render Response
          將response根據要求進行包裝后返回給用戶,這里的包裝是指知道的頁面技術,比如html,比如手機展現技術

          3.client and server component id
          server component id可以在component 的id屬性中顯性填寫id,以便在服務端能唯一標識該組件
          client id 是繼承server component id,他最后體現的也是html 中的標簽,而id也為對應標簽的id,與server component id不同的是,他有繼承關系,比如

          <form id="myForm" method="post"
          action="/jia-standard-components/client_ids.jsf"
          enctype="application/x-www-form-urlencoded">
          <p>
          <input type="text" name="myForm:_id1" />
          </p>
          <p>
          <input id="myForm:inputText" type="text" name="myForm:inputText" />
          </p>
          ...
          </form>
          而對應的服務端
          <p>
          <h:outputText id="outputText" value="What are you looking at?"/>
          </p>
          <h:form id="myForm">
          <p>
          <h:inputText/>
          </p>
          <p>
          <h:inputText id="inputText"/>
          </p>
          ...
          </h:form>

          4.JSF EL 表達語言: 他是基于JSTL的描述
          此外Jsp中application,session,page 四個scoped變量,只有page jsf中不支持

          除了上面三個scoped變量,jsf還有下面一些隱性的變量
          applicationScope:從application中獲取對象,比如#{applicationScope.myVariable} myVariable對象存放在application中
          cookie:從cookie中獲取數據
          facesContext:這個jsp2.0中沒有,當前請求的faceContext實例
          header:http head頭信息,比如#{header['User-Agent']}
          headerValues:多個head頭信息的載體 比如#{headerValues['Accept-Encoding'][3]}
          initParam:初始化的一些參數比如servlet context initialization parameters 可以這樣使用#{initParam.adminEmail}
          param:等同jsp中的request.getParameter() 用法#{param.address}
          paramValues:等同jsp中的request.getParameterValues 用法#{param.address[2]}
          requestScope等同于jsp中reqeust 用法#{requestScope.user-Preferences}
          sessionScope等同于jsp中session  用法#{sessionScope['user']}
          view 這個變量jsp2.0中沒有,它表示當前視圖,它有三個屬性viewId,renderKitId, and locale 用法#{view.locale}

          5.需要的jar包和文件
          構建jsf環境需要jsf-api.jar,jsf-impl.jar,jstl.jar,standard.jar 以及配置文件faces-config.xml
          需要在web.xml 中配置faceservlet
          <web-app>
          ...
          <servlet>
          <servlet-name>Faces Servlet</servlet-name>
          <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
          </servlet>
          <servlet-mapping>
          <servlet-name>Faces Servlet</servlet-name>
          <url-pattern>/faces/*</url-pattern>
          </servlet-mapping>
          ...
          </web-app>

          web.xml 中jsf定義的上下文的參數有
          javax.faces.CONFIG_FILES
          javax.faces.DEFAULT_SUFFIX
          javax.faces.LIFECYCLE_ID
          javax.faces.STATE_SAVING_METHOD

          RI-specific configuration parameters:
          com.sun.faces.NUMBER_OF_VIEWS_IN_SESSION
          com.sun.faces.validateXml
          com.sun.faces.verifyObjects

          比如
          <web-app>
          ...
          <context-param>
          <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
          <param-value>server</param-value>
          </context-param>
          <context-param>
          <param-name>javax.faces.CONFIG_FILES</param-name>
          <param-value>/WEB-INF/navigation.xml,/WEB-INF/RegistrationWizard.xml</
          param-value>
          </context-param>
          ...
          <web-app>
          除了web.xml jsf相關的參數,本身jsf具有faces-config.xml 具體里面的配置屬性可以查看配置文件,可以找可視化工具進行配置。

           

          posted on 2010-11-04 16:24 linugb118 閱讀(2596) 評論(1)  編輯  收藏

          Feedback

          # re: JSF 探索 (1) 2010-11-05 13:12 semmy

          首先訂正你一個錯誤,JSF不是一個框架,而一個標準,sun提出有JSF完全就只有接口,可以不同廠商去實現,雖然sun也提供一套實現框架。  回復  更多評論   



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


          網站導航:
           

          My Links

          Blog Stats

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 眉山市| 五指山市| 普定县| 永仁县| 珲春市| 新郑市| 小金县| 海丰县| 蒙山县| 余江县| 德州市| 海宁市| 和静县| 都匀市| 洞头县| 海晏县| 潢川县| 大化| 博罗县| 客服| 紫阳县| 星子县| 涪陵区| 左云县| 安达市| 宜宾市| 白银市| 元江| 龙井市| 龙海市| 德兴市| 石首市| 萨迦县| 宜川县| 云林县| 冷水江市| 贺州市| 大丰市| 武强县| 依兰县| 伊宁县|