熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

JSF ( JavaServer Faces ) 介紹

2013-11-15 11:42:50  來源: JSP教程 

  JavaServer Pages(JSF) 在 Java 的 WEB 編程中已經被認為是下一個重大的事件通過 JSF 你可以在網頁上使用 WEB 組件來捕獲用戶行為產生的事件不遠的將來Java 工具將支持這個技術開發 WEB 應用程序將與我們現在開發 SWING 程序類似拖放控件寫事件偵聽器本文是一個 JSF 的簡要介紹並且提供一個 JSF 的例子用來展示 JSF 的事件驅動特性要理解本文您需要對 servlets JSP JavaBeans 與標簽庫有一定的理解
  
  首先一個 JSF 應用就是一個 servlet/JSP 應用它有一個配置描述符有 JSP 頁面客戶定制標簽靜態資源等等不同的是JSF 應用是事件驅動的你通過寫一個事件偵聽類來決定應用程序的行為以下建立一個 JSF 應用所需要的幾個步驟
  建立 JSP 頁面用 JSF 組件包裝 HTML 元素
  寫一個 JavaBean 用來保持用戶輸入與組件數據的狀態
  寫一個事件偵聽器來決定當某事件發生時應該有什麼反映比如用戶點擊了一個按鈕或者提交了表單JSF 支持兩個事件ActionEvent 與 valueChangeEvent ActionEvent 是針對用戶提交表單與點擊按鈕的而 valueChangeEvent 是當一個 JSF 組件改變了時觸發
  
  現在讓我們來看一下 JSF 動作的細節
  
  JSF 怎樣工作
  JSP 頁面是 JSF 應用的用戶接口每個頁面包括一些 JSF 組件用來描述 WEB 控件如表單輸入框按鈕等等組件可以嵌入另一個組件中正如輸入框可以在表單中每個 JSP 頁面就這樣表示為組件樹JaveBeans 從用戶的請求中獲取數據並存儲
  
  這是有意思的部分每當用戶做任何事情如點擊按鈕或者提交表單都有事件產生然後事件消息通過 HTTP 傳到服務器在服務器端是一個配置了叫做 Faces servlet 的特殊 servlet 的 WEB 容器Faces servlet(javaxfaceswebappFacesServlet)是所有 JSF 應用的引擎每個 JSF 應用在 WEB 容器中都有獨立的 Faces servlet 另一個重要的對象是 ntextFacesContext 它包括了所有關於當前用戶請求的必要信息
  
  Faces servlet 的後台處理是相當復雜的然而你沒有必要了解這些細節只需要記住Faces servlet 為 JSP 頁面創建了組件樹對組件樹的控制又對應著事件Faces servlet 知道怎麼去創建組件樹因為它已經訪問了當前應用中所有的 JSP 頁面Faces servlet 還會創建一個 Event 對象並把它傳遞給所有注冊過的偵聽器你可以通過與當前請求相對應的 FacesContext 得到這個頁面的組件樹
  
  客戶端浏覽器上 WEB 控件產生的事件被包含在一個 HTTP 請求中放在一起還有如浏覽器類型請求地址等其它信息因此所有需要 Faces servlet 處理的請求必須指向這個 servlet 那你怎樣通過調用 Faces servelt 來處理每個 HTTP 請求呢?很容易只需要在配置描述符裡用一個 servletmapping 元素把一個特殊的 URL 式樣映射到 Faces servlet通常你會用到 /faces/* 樣式如下所示
  <! Faces Servlet >
  <servlet>
  <servletname>Faces Servlet</servletname>
  <servletclass>javaxfaceswebappFacesServlet</servletclass>
  <loadonstartup></loadonstartup>
  </servlet>
  
  <! Faces Servlet Mapping >
  <servletmapping>
  <servletname>Faces Servlet</servletname>
  <urlpattern>/faces/*</urlpattern>
  </servletmapping>
  請求地址必須包含有在 <urlpattern> 元素中描述的樣式這個要求不容易達到另外也需要注意的是 <servlet> 元素它包含 Faces servlet 有一個 <loadonstartup> 元素用來確是否應用程序第一次啟動時 servlet 是否加載
  為了捕獲組件產生的事件你需要為這個組件寫一個偵聽器並把它注冊給這個組件通過在表示組件的客戶端標簽中嵌入 <action_listener> 元素能做到這一點例如為了讓一個名叫 jsfAppMyActionListener 的事件偵聽器來捕獲一個名叫 submitButton 的命令按鈕產生的事件在你的 JSP 頁面中寫如下的代碼即可
  <h:command_button id=submitButton label=Add commandName=submit >
   <f:action_listener type=jsfAppMyActionListener />
  </h:command_button>
  一個 action listener 必須實現 javaxfaceseventActionListener 接口而一個 valuechanged listener 必須實現 javafaceseventvalueChangedLister 接口下面讓我們來創建一個簡單的 JSF 應用以展現 JSF 是怎麼樣事件驅動的
  
  一個簡單的 JSF 應用
  我們將創建一個簡單的應用它可以實現對二個數字相加為了運行這個應用你需要准備 TOMCAT 與 JSF v EA(包含在 Java Web Services Developer Pack (JWSDP) 中)這個應用程序包括
  adderjsp JSP 頁面
  NumberBean 存放用戶數據的 JavaBean
  MyActionListener 事件偵聽器
  webxml 配置描述文件
  
  為了使這個應用能正常工作還需要幾個 jar 文件包括 JSF 標准實現與其它類庫如果你安裝了 JWSDP 你就可以在 jsflib 目錄下找到所需要的這些文件把這些 jar 文件拷貝到 WEBINF/lib 目錄下下面是整個的 jar 與 tld 文件列表
  jsfapijar 包含有 Faces servlet 與其它相關 javaxfaces 包下面的類
  jfsrijar 是 JSF 的參考實現
  jstl_eljar
  standardjar
  此外一個 JSF 的應用還需要如下的類庫它們是 Apache Jakarta 項目的一部分
  commonsbeanutilsjar
  commonsdigesterjar
  commonsloggingjar is
  
  以下的幾小段討論這個 JSF 示例的每個部分最後的一小段編譯與運行解釋 JSF 應用怎麼樣運行
  
  創建目錄結構
  首先為你的 JSF 應用創建一個目錄結構在 TOMCAT 中它在 webapps 目錄下描述了叫做 myJSFApp 的應用程序的目錄結構
  
  寫配置描述符
  與其它的 servlet/JSP 應用一樣這個應用程序也需要一個配置描述文件清單表示
  
  Listing The deployment descriptor (the webxml file)
  
  <?xml version=?>
  <!DOCTYPE webapp PUBLIC
  //Sun Microsystems Inc//DTD Web Application //EN
  app__dtd;;>
  
  <webapp>
  <! Faces Servlet >
  <servlet>
    <servletname>Faces Servlet</servletname>
    <servletclass>javaxfaceswebappFacesServlet</servletclass>
    <loadonstartup> </loadonstartup>
  </servlet>
  
  <! Faces Servlet Mapping >
  <servletmapping>
    <servletname>Faces Servlet</servletname>
    <urlpattern>/faces/*</urlpattern>
  </servletmapping>
  </webapp>
  
  在這個配置描述文件中有二個部分 <servlet> 元素注冊 Faces servlet <servletmapping> 元素聲明任何包含有 /faces/ 式樣的請求地址必須傳遞給 Faces servlet
  
  創建 JSP 頁面
  一個叫做 adderjsp 的 JSP 頁面提供用戶接口清單所示
  
  Listing The adderjsp page
  
  <%@ taglib uri=;; prefix=h %>
  <%@ taglib uri=;; prefix=f %>
  <html>
  <head>
  <title>Add numbers</title>
  </head>
  <body>
  <jsp:useBean id=NumberBean class=jsfAppNumberBean scope=session />
  <f:use_faces><br />
  <h:form id=addForm formName=addForm ><br />
    First Number:<br />
    <h:input_number id=firstNumber valueRef=NumberBeanfirstNumber /><br />
    Second Number:
    <h:input_number id=secondNumber valueRef=NumberBeansecondNumber /><br />
    Result:
    <h:output_number id=output valueRef=NumberBeanresult/><br>
    <h:command_button id=submitButton label=Add commandName=submit >
      <f:action_listener type=jsfAppMyActionListener />
    </h:command_button>
  </h:form>
  </f:use_faces>
  </body>
  </html>
  
  我們首先定義了倆個標簽它用到 JSF 的兩個標簽庫html 與 core 這倆個標簽庫的定義可以在 jsfrijar 文件中找到所以你不用為它擔心它們的前綴分別是 h / f
  <%@ taglib uri=;; prefix=h %>
  <%@ taglib uri=;; prefix=f %>
   <jsp:useBean> 這個動作元素定義 NumberBean JavaBean 為 session scope
   <jsp:useBean id=NumberBean class=jsfApp
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19478.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.