簡單JSF舉例來介紹JSF應用及此MVC架構的一點好處

來源:互聯網
上載者:User

本文簡單介紹了下JSF,同時利用一個小例子介紹了JSF項目開發過程,從中體會著此MVC架構給開發帶來的好處。期間也簡單說明了下與struts的一點點區別。

 

JSF(javaServer Faces)是符合J2EE5標準的web端架構。JSF提供標準的編程介面、事件驅動模型、豐富的可擴充的組件庫:包括一個核心的JSP標記庫用來處理事件、執行驗證及其他非UI相關的操作,即core標籤庫;和一個標準的HTML標記庫來表示UI組件,即html標籤庫。

 

JSF體繫結構如所示:

由可以清晰瞭解到JSF是一個符合MVC設計規範的web架構,同時所有的請求交由FacesSerlet(javax.faces.webapp.FacesServlet)類來處理。我們只需要將這個servlet配置到web.xml,告知伺服器那些請求交由此servlet處理就可以。下面進行簡單應用。

 

項目結構如所示:

 

JSF項目入口:

 

配置web.xml,告訴伺服器所有以.faces結尾的請求都交由JSF來處理,web.xml配置如下所示:

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  <display-name>JSFTEST</display-name>    <servlet>  <servlet-name>FacesServlet</servlet-name>  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>  <load-on-startup>1</load-on-startup>  </servlet>  <servlet-mapping>  <servlet-name>FacesServlet</servlet-name>  <url-pattern>*.faces</url-pattern>  </servlet-mapping>    <welcome-file-list>  <welcome-file>index.faces</welcome-file>  </welcome-file-list></web-app>

 

接下編寫應用:使用者輸入名稱經後台登陸處理後返回歡迎介面。在編寫之前,我們看上文web.xml的<welcome-file-list>中配置的應用首頁是index.faces,這樣做一是方便示範,另一很重要一點是想說,如果我們在應用首頁中直接使用JSF標籤,此時如果以簡單java web的形式請求該頁面,則會出現javax.servlet.jsp.JspException: Cannot find FacesContext等問題,此時我們可以編寫兩個頁面一個index.jsp(這正的首頁,包含JSF標籤),一個index.faces(不做任何操作),也有其他方法,此處只為示範做個簡短說明,詳情後續會深入。

 

Index.faces頁面代碼:

 

<%@ page language="java" contentType="text/html; charset=utf-8"  pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>first JSF application</title></head><body></body></html> 

Index.jsp頁面代碼:

 

<%@taglib uri="http://java.sun.com/jsf/core" prefix="c" %><%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %><%@ page language="java" contentType="text/html; charset=utf-8"  pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>first JSF application</title></head><body><c:view><h:form><h3>請輸入您的姓名</h3>姓名:<h:inputText value="#{user.userName}" /><h:commandButton value="登入" action="#{user.login}" /></h:form></c:view></body></html> 

看到上面的代碼,我們發現輸入框和登入按鈕都是綁定到了一個User上了,這一點也是JSF同Struts2在推送資料上所不同的地方。上文中的user是什麼呢,這涉及的JSF很關鍵的知識點Managed Beans,其作用相當於struts2的Action,但有所不同。這個user實際對應著java端UserBean,其代碼所下所示。

UserBean代碼:

package com.test;public class UserBean {//該屬性用於與JSF標籤綁定private String userName;//該方法被綁定到UI組件(按鈕)的action屬性public String login(){System.out.println("====login======");this.userName += " 後台login方法處理了";return "login";}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}}

 

 此Bean之所以能夠在上文中的Index.jsp中作為user使用,原因是它配置在JSF核心的設定檔faces-config.xml中作為Managed Beans而存在使用了。

 

faces-config.xml配置:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"><faces-config><managed-bean><managed-bean-name>user</managed-bean-name><managed-bean-class>com.test.UserBean</managed-bean-class><managed-bean-scope>session</managed-bean-scope></managed-bean><navigation-rule><from-view-id>/index.jsp</from-view-id><navigation-case><from-outcome>login</from-outcome><to-view-id>/welcome.jsp</to-view-id></navigation-case></navigation-rule></faces-config>

 

 前段輸入使用者名稱進行登入,會調用到UserBean的login方法上,其返還的login標識會被JSF捕捉依次判斷其跳轉的介面,在上文的faces-config.xml中發現其要跳轉至/welcome.jsp頁面。而要輸出的內容不需要我們去關係,原因是我們已發現managed Beans能夠同對應的介面標籤組件進行綁定。

 

welcome.jsp頁面代碼:

 

<%@taglib uri="http://java.sun.com/jsf/core" prefix="c" %><%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %><%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>first JSF application</title></head><body><c:view><h:form><h3>當前登入人</h3><h:outputText value="#{user.userName }" /></h:form></c:view></body></html>

 

程式運行效果:

 

首先使用者看到如下輸入介面:

 

而後點擊登入,會在welcome.jsp中收到後台login方法處理結果:

整個運行過程,我們真正關心的是什麼呢,是頁面(商務程序)的跳轉和登入過程的幕後處理(商務邏輯),至於如何達到前端和後端的互動我們沒有過多關心,讓開發人員將更多精力關注在業務上。

 

從作用上看託管Bean類似struts2的Action,但作用模式不同。對於struts2的Action而言,應用通過表單提交方式把請求提交到struts2的Action;但JSF的託管Bean,系統直接將JSF中的UI組件的行為綁定到託管Bean的屬性或方法。

 

總之ManagedBeans用於同JSF標籤綁定,這些Beans都是在faces-config.xml配置的,同時此檔案也決定著介面的跳轉過程。此MVC架構允許我們在配置好Controller後,之關係商務程序及商務邏輯,而不必過多關係複雜的資料互動。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.