_JSF入門環(huán)境配置XML配置和標(biāo)簽使用詳細(xì)介紹以及發(fā)布部署_第1頁
_JSF入門環(huán)境配置XML配置和標(biāo)簽使用詳細(xì)介紹以及發(fā)布部署_第2頁
_JSF入門環(huán)境配置XML配置和標(biāo)簽使用詳細(xì)介紹以及發(fā)布部署_第3頁
_JSF入門環(huán)境配置XML配置和標(biāo)簽使用詳細(xì)介紹以及發(fā)布部署_第4頁
_JSF入門環(huán)境配置XML配置和標(biāo)簽使用詳細(xì)介紹以及發(fā)布部署_第5頁
已閱讀5頁,還剩94頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第7章 JavaServer FacesLyh_ht163JSF簡介JSF入門JSF標(biāo)簽JSF運(yùn)行流程和生命周期數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證事件處理學(xué)習(xí)目標(biāo)7.1 JSF簡介JavaServer Faces (JSF) :符合JavaEE5標(biāo)準(zhǔn)的Java Web應(yīng)用框架。JSF的歷史:2001年中旬:JSF草案(由Java Community Process(JCP)團(tuán)隊(duì)研擬出來的一套標(biāo)準(zhǔn))2004.3:JSF1.0(在2004年三月發(fā)布了JavaServer Faces 1.0)2009:JSF2.07.1 JSF簡介MVC介紹Model1架構(gòu):JSP+JavaBean7.1 JSF簡介MVC介紹Mode

2、l2架構(gòu):Servlet作為前端控制器,Servlet中調(diào)用JavaBean來完成實(shí)際的邏輯處理。7.1 JSF簡介JSF 體系結(jié)構(gòu) JSF 它既是 Java Web 用戶界面標(biāo)準(zhǔn)又是嚴(yán)格遵循模型-視圖控制器 (MVC) 設(shè)計(jì)模式的框架。用戶界面代碼(視圖)與應(yīng)用程序數(shù)據(jù)和邏輯(模型)的清晰分離使 JSF 應(yīng)用程序更易于管理。所有與應(yīng)用程序的用戶交互均由一個(gè)前端“Faces servlet”(控制器)來處理。 7.1 JSF簡介JSF 體系結(jié)構(gòu) 7.1 JSF簡介JSF的優(yōu)勢UI組件(UI-component) 事件驅(qū)動模式用戶界面到業(yè)務(wù)邏輯的直接映射 程序員和網(wǎng)頁設(shè)計(jì)人員的分工 請求處理生命

3、周期的多階段劃分 全面的用戶自定義支持 Web開發(fā)的官方標(biāo)準(zhǔn)之一大量的IDE工具支持7.2 JSF入門第一個(gè)JSF例程:根據(jù)下拉列表選擇來跳轉(zhuǎn)到不同的頁面7.2 JSF入門第一個(gè)JSF例程:MyJsfAction.java設(shè)計(jì)package com.sunyang;import javax.faces.context.FacesContext;import javax.faces.event.ValueChangeEvent;public class MyJsfAction private String type;public String getType() return type;publ

4、ic void setType(String type) this.type = type;/定義監(jiān)聽值改變的方法public void selectType(ValueChangeEvent event)/FacesContext context = FacesContext.getCurrentInstance();String nameTemp = (String)event.getNewValue();if(JAVA.equals(nameTemp)type = JAVA;elsetype = C;(下接右邊代碼)/定義導(dǎo)航頁面中轉(zhuǎn)的Urlpublic String gourl()re

5、turn type;7.2 JSF入門第一個(gè)JSF例程:faces-config.xml設(shè)計(jì)sunyangcom.sunyang.MyJsfActionsession/index.jspJAVA/jsp/newJava.jspC/jsp/newC.jsp7.2 JSF入門第一個(gè)JSF例程:web.xml設(shè)計(jì) com.sun.faces.config.ConfigureListener javax.faces.CONFIG_FILES /WEB-INF/faces-config.xml Faces Servlet javax.faces.webapp.FacesServlet 0 Faces S

6、ervlet *.jsf7.2 JSF入門第一個(gè)JSF例程:index.jsp My JSF index.jsp starting page JSF測試信息! 請選擇查詢項(xiàng)目: 7.2 JSF入門第一個(gè)JSF例程:newJava.jsp 注:另一個(gè)頁面newC.jsp類似。 My JSP newJava.jsp starting page JSF測試信息! 歡迎學(xué)習(xí)語言,祝你成功! 7.2 JSF入門示例程序中涉及到的幾個(gè)內(nèi)容:JSF 表達(dá)式語言(Expression Language) 托管 Bean(Backing Bean)JSF導(dǎo)航7.2 JSF入門JSF 表達(dá)式語言(EL) :JSF

7、 Expression Language 搭配 JSF 標(biāo)簽來使用,是用來存取數(shù)據(jù)對象的一個(gè)簡易語言。以#開始,將變量或運(yùn)算式放置在 與 之間。#userBEL的變量名也可以程序執(zhí)行過程中所聲明的名稱,或是JSF EL預(yù)定義的隱含對象。# 或 #paramname 如果變量是List類型或Map類型的話,則可以在 中指定索引。#someBean.someList0 #someBean.someMap 7.2 JSF入門JSF 表達(dá)式語言(EL)示例:示 例說 明#myBean.value返回保存在關(guān)鍵字myBean 下的對象的value屬性,或者如果myBean是一個(gè)Map,則返回存儲在關(guān)鍵字

8、value下的元素#myBeanvalue同#myBean.value“#myArrayList5返回保存在關(guān)鍵字myArrayList下的List的第5個(gè)元素#myMapfoo從保存在關(guān)鍵字myMap下的Map中返回保存在關(guān)鍵字foo下的對象#myMapfoo.bar從保存在myMap關(guān)鍵字下的Map中返回保存在等于表達(dá)式foo.bar的值的關(guān)鍵字下的對象#myMapfoo.value從保存在關(guān)鍵字myMap下的Map中返回保存在關(guān)鍵字foo下的對象的value屬性#myMapfoo.value5從保存在關(guān)鍵字myMap下的Map返回關(guān)鍵字foo下的List或者數(shù)組的第5個(gè)元素#myStri

9、ng返回存儲在myString關(guān)鍵字下的String對象#myInteger返回存儲在myInteger關(guān)鍵字下的Integer對象#user.role = normal如果關(guān)鍵字user下的對象的role 屬性等于normal則返回true.否則返回false7.2 JSF入門JSF 表達(dá)式語言(EL)示例(續(xù)):示 例說 明#(user.balance - 200)= 0如果關(guān)鍵字user下的對象的balance屬性減去200等于0,則返回true。否則返回falseHello #!返回字符串Hello ,后跟關(guān)鍵字user下的對象的name屬性。所以,如果用戶的名稱是Sean,則會返回H

10、ello Sean!You are #(user.balance 100)? loaded : not loaded如果關(guān)鍵字user下的對象的balance 屬性小于100,返回You are loaded,否則返回You are not loaded#myBean.methodName返回關(guān)鍵字myBean下名為methodName的對象的方法#20 + 3返回237.2 JSF入門JSF 表達(dá)式語言(EL)操作符:語 法替 代操 作訪問數(shù)組、List元素或者M(jìn)ap條目()創(chuàng)建子表達(dá)式并控制求解順序? :條件表達(dá)式: ifCondition ? trueValue : falseValue

11、+加-減 或者負(fù)號*乘/div除%mod模(求余)=eq等于(對對象,使用equals()方法)!=ne不等于gt大于=ge大于或等于&and邏輯AND|or邏輯OR!not邏輯NOTempty測試空值(null、空字符串、數(shù)組、Map或者沒有值的Collection)7.2 JSF入門JSF 表達(dá)式語言(EL)隱含變量:隱含變量說 明實(shí) 例applicationScope應(yīng)用作用域變量的Map,以名稱作為關(guān)鍵字#applicationScope.myVariablecookie一個(gè)當(dāng)前請求的cookie值的Map,以cookie名稱作為關(guān)鍵字#cookie.myCookiefacesCont

12、ext當(dāng)前請求的FacesContext 實(shí)例#facesContextheader當(dāng)前請求的HTTP首部值的 Map,以header名稱作為關(guān)鍵字。如果給定的header 名稱有多個(gè)值,僅返回第1個(gè)值#headerUser-AgentheaderValues當(dāng)前請求的HTTP首部值的 Map,以header名稱作為關(guān)鍵字。對每個(gè)關(guān)鍵字,返回一個(gè)String數(shù)組(以便所有的值都能訪問)#headerValuesAccept-Encoding3initParam應(yīng)用初始化參數(shù)的Map,以參數(shù)名稱為關(guān)鍵字。(也稱為servlet 上下文初始化參數(shù),在部署描述符中設(shè)置)#initParam.admi

13、nEmailparam請求參數(shù)的Map,以param 名稱作為關(guān)鍵字。如果對給定的參數(shù)名稱有多個(gè)值,僅返回第1個(gè)值#param.address7.2 JSF入門JSF 表達(dá)式語言(EL)隱含變量(續(xù)):隱含變量說 明實(shí) 例paramValues請求參數(shù)的Map,以param 名稱作為關(guān)鍵字。對每個(gè)關(guān)鍵字,返回一個(gè)String數(shù)組(以便可以訪問所有的值)#param.address2requestScope請求范圍內(nèi)的變量的Map,以名稱作為關(guān)鍵字#requestScope.user-PreferencessessionScope會話范圍內(nèi)的變量的Map,以名稱作為關(guān)鍵字#sessionScop

14、euserview當(dāng)前視圖#view.locale7.2 JSF入門JSF表達(dá)式示例:如何在JSP頁面中訪問web.xml中的初始化參數(shù)?(使用預(yù)定義的JSF EL變量 initParam來訪問)web.xml中有:productId2004Q4JSP頁面中可以使用她 #initParamproductId來訪問 .例如:Product Id: 7.2 JSF入門JSF表達(dá)式示例:如何將URL中的參數(shù)傳遞到JSF程序中?如果你有下面的URL: :/your_server/your_app/product.jsf?id=777,JSF頁面上,你也可以使用預(yù)定義的變量訪問參數(shù),例如: 注意: 你必

15、須直接調(diào)用該JSF頁面,并且使用servlet 映射 (mapping).7.2 JSF入門JSF表達(dá)式示例:如何添加上下文路徑到outputLink的URL中?注:對于URL :/localhost:8080/JSFCh03/faces/test.jsp來說,getRequestContextPath方法的返回值為/JSFCh03。在當(dāng)前的JSF實(shí)現(xiàn)中,當(dāng)在outputLink 中定義的路徑以/開始時(shí),沒有添加上下文路徑到URL中, 請?jiān)赨RL中使用 #facesContext.externalContext.requestContextPath 前綴.例如:7.2 JSF入門托管Bean

16、(Managed Beans)JSF 使用 Bean 來達(dá)到邏輯層與表現(xiàn)層分離的目的,Bean 的管理集中在配置文件中,只要修改配置文件,就可以修改 Bean 之間的相依關(guān)系。Backing Beans:在真正的業(yè)務(wù)邏輯Bean及UI組件之間搭起橋梁,在Backing Bean中會呼叫業(yè)務(wù)邏輯Bean處理使用者的請求,或者是將業(yè)務(wù)處理結(jié)果放置其中,等待UI組件取出當(dāng)中的值并顯示結(jié)果給使用者。 7.2 JSF入門托管Bean (Managed Beans)作用域:application :一直存活session :會話過程request :請求階段none :需要時(shí),臨時(shí)sunyangcom.s

17、unyang.MyJsfActionsession7.2 JSF入門托管Bean (Managed Beans)Bean的基本定義:名稱 類 存活范圍 可選設(shè)置屬性的初始值 user #user 7.2 JSF入門托管Bean (Managed Beans)在Java代碼中獲取Bean:第一種方式: FacesContext context =FacesContext.getCurrentInstance(); ValueBinding binding = context.getApplication().createValueBinding(#userBean); UserBean bean

18、 = (UserBean ) binding.getValue(context); 第二種方式:FacesContext ctx = FacesContext.getCurrentInstance(); VariableResolver variableResolver =ctx.getApplication().getVariableResolver(); UserBean bean = (UserBean ) variableResolver.resolveVariable(ctx, “userBean); 第三種方式:Application application=context.get

19、Application(); UserBean bean=(UserBean )application.evaluateValueExpressionGet(context,#userBean,UserBean .class); 7.2 JSF入門FacesContext與ExternalContext對每個(gè)JSF請求,F(xiàn)acesServlet對象都會為其獲取一個(gè)javax.faces.context.FacesContext類的實(shí)例。FacesContext的實(shí)例里包含了所有處理JSF請求所需的每個(gè)請求的狀態(tài)信息。7.2 JSF入門在Java代碼中使用FacesContext的示例:獲取Se

20、ssion對象及其特性通過ExternalContext對象訪問與當(dāng)前請求相關(guān)聯(lián)的Session對象:Object sessionAttribute = null;FacesContext facesContext = FacesContext.getCurrentInstance();ExternalContext externalContext = facesContext.getExternalContext();Map sessionMap = externalContext.getSessionMap();if (sessionMap!=null)sessionAttribute =

21、 sessionMap.get(key);7.2 JSF入門在Java代碼中使用FacesContext的示例:如何結(jié)束session?(使用session的 invalidate方法 )從action方法中結(jié)束session: public String logout() FacesContext fc = FacesContext.getCurrentInstance();HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);session.invalidate();return logi

22、n_page; 7.2 JSF入門在Java代碼中使用FacesContext的示例:如何從java代碼中訪問web.xml 中的初始化參數(shù)?(使用externalContext的 getInitParameter 方法)Web.xml:connectionStringjdbc:oracle:thin:scott/tigercartman:1521:O901DBJava代碼:FacesContext fc = FacesContext.getCurrentInstance();String connection = fc.getExternalContext().getInitParamete

23、r(connectionString); 7.2 JSF入門在Java代碼中使用FacesContext的示例:如何在JSF程序中獲取URL的傳遞參數(shù)?(使用externalContext的 getRequestParameterMap方法)如果URL: :/your_server/your_app/product.jsf?id=777, 你可以使用下面的代碼來訪問所傳遞的參數(shù): FacesContext fc = FacesContext.getCurrentInstance();String id = (String) fc.getExternalContext().getRequestP

24、arameterMap().get(id); 7.2 JSF入門web.xml中為JSF配置一些額外的參數(shù): javax.faces.STATE_SAVING_METHOD client javax.faces.DEFAULT_SUFFIX .jsp javax.faces.LIFECYCLE_ID 7.2 JSF入門web.xml中為JSF配置一些額外的參數(shù): javax.faces.CONFIG_FILES /WEB-INF/faces-config-beans.xml,/WEB-INF/faces-config-nav.xml javax.faces.verifyObjects true

25、 javax.faces.validateXml true 7.2 JSF入門web.xml中為JSF配置一些額外的參數(shù): javax.faces.NUMBER_OF_VIEWS_IN_SESSION -1 7.2 JSF入門JSF導(dǎo)航-Navigation :請求指定的頁面。中的:請求返回結(jié)果。:請求導(dǎo)向至的頁面。/index.jspJAVA/jsp/newJava.jspC/jsp/newC.jsp7.2 JSF入門JSF導(dǎo)航-Navigation :請求指定的頁面。中的:請求返回結(jié)果。:請求導(dǎo)向至的頁面。index.jsp頁面中:托管Bean對應(yīng)的Java代碼中:public class

26、 MyJsfAction private String type;/type的getter和setter方法/定義監(jiān)聽值改變的方法public void selectType(ValueChangeEvent event)/FacesContext context = FacesContext.getCurrentInstance();String nameTemp = (String)event.getNewValue();if(JAVA.equals(nameTemp)type = JAVA;elsetype = C;/定義導(dǎo)航頁面中轉(zhuǎn)的Urlpublic String gourl()re

27、turn type;7.2 JSF入門JSF導(dǎo)航-JSF 帶參數(shù) 頁面重定向問題:如果想在登錄失敗時(shí),傳遞頁面的錯誤信息,怎么實(shí)現(xiàn)? /login.jsp succeed /loginsuccess.jsp fail /login.jsp 7.2 JSF入門JSF導(dǎo)航-JSF 帶參數(shù) 頁面重定向LoginBean(去掉原來fail的導(dǎo)航,只保留succeed的導(dǎo)航即可):public String login() String result = ;int ret = authenticate(username,pwd,verifyingcode); if(ret = 0) result = s

28、ucceed; else switch (ret) case 1: result = login.jsf?result=wrongpwd;break; case 2: result = login.jsf?result=wrongcode;break; try FacesContext.getCurrentInstance().getExternalContext().redirect(result); catch (IOException e) e.printStackTrace(); return result;7.3 JSF標(biāo)簽JSF提供了大量的UI標(biāo)簽來簡化創(chuàng)建視圖。使用這些標(biāo)簽,可以

29、通過其value,binding,action,actionListener等屬性直接綁定到托管Bean的屬性,實(shí)例或者方法上。JSF包括兩組標(biāo)簽庫:jsf_core.tld核心標(biāo)簽庫和html_basic。7.3 JSF標(biāo)簽Taglib 指令42JSF 核心標(biāo)簽庫JSF HTML 標(biāo)簽庫使用 JSF 標(biāo)簽.7.3 JSF標(biāo)簽(JSF核心標(biāo)簽庫)標(biāo)簽說明f:validateLength驗(yàn)證組件值的長度f:validateDoubleRange驗(yàn)證組件值的雙精度范圍f:validateLongRange驗(yàn)證組件值的長整型范圍f:validator向組件添加驗(yàn)證器f:loadBundle加載資源包

30、f:verbatim向頁面中添加標(biāo)簽f:selectItem指定 UISelectOne 或 UISelectMany 組件的一個(gè)項(xiàng)目f:selectItems指定 UISelectOne 或 UISelectMany 組件的多個(gè)項(xiàng)目437.3 JSF標(biāo)簽(JSF核心標(biāo)簽庫)44標(biāo)簽說明f:view創(chuàng)建頂層視圖f:subview創(chuàng)建視圖的子視圖f:facet向組件添加 facetf:param向組件添加參數(shù)f:attribute向組件添加屬性f:actionListener在父組件上注冊操作監(jiān)聽器f:valueChangeListener向父組件注冊值變更監(jiān)聽器f:converter注冊任意轉(zhuǎn)

31、換器f:convertDateTime注冊日期時(shí)間轉(zhuǎn)換器f:convertNumber注冊數(shù)量轉(zhuǎn)換器標(biāo)準(zhǔn)的轉(zhuǎn)換器和驗(yàn)證器示例編寫一個(gè)填寫付款信息的頁面,付款信息包括付款金額、信用卡號、信用卡有效期,要求對輸入的數(shù)據(jù)進(jìn)行特定的轉(zhuǎn)換和驗(yàn)證458899123456789876512/2005示例代碼46import java.util.Date;public class PaymentBean private double amount; private String card = ; private Date date = new Date(); public void setAmount(dou

32、ble newValue) amount = newValue; public double getAmount() return amount; public void setCard(String newValue) card = newValue; public String getCard() return card; public void setDate(Date newValue) date = newValue; public Date getDate() return date; 受管理的Bean index.jsp result.jsp7.3 JSF標(biāo)簽( JSF HTML

33、 標(biāo)簽)47組件標(biāo)簽說明UISelectOneh:SelectOneListbox單選列表框h:selectOneMenu單選菜單h:selectOneRadio單選按鈕集UISelectBooleanh:selectBooleanCheckbox單個(gè)復(fù)選框UISelectManyh:selectManyListbox復(fù)選框集h:selectManyCheckbox多行選擇列表框h:selectManyMenu多選菜單UIPanelh:panelGrid表示一個(gè) HTML 表格h:panelGroup組合一系列組件UIMessageh:message顯示一個(gè)組件的最近使用的消息UIMessag

34、esh:messages顯示所有消息UIGraphich:graphicImage顯示一個(gè)圖像UIDatah:dataTable功能豐富的表格控件UIColumnh:column表示表格中的列7.3 JSF標(biāo)簽( JSF HTML 標(biāo)簽)組件標(biāo)簽說明UIFormh:form表示 HTML表單元素UIInputh:InputText單行文本輸入控件h:inputTextarea多行文本輸入控件h:InputSecret密碼輸入控件h:inputHidden隱藏字段UIOutputh:outputLabel顯示文本h:outputLink鏈接到另一頁面或某頁面上的特定位置h:outputForma

35、t顯示格式化的信息h:outputText當(dāng)行文本輸入U(xiǎn)ICommandh:commandButton表示一個(gè)按鈕h:commandLink表示一個(gè)鏈接487.3 JSF標(biāo)簽( 表單)表單:h:form標(biāo)簽產(chǎn)生HTML form元素如果在名為/index.jsp的JSF頁面中使用了無屬性的h:form標(biāo)簽,則Form呈現(xiàn)器將產(chǎn)生如下的HTML代碼:可以為h:form指定style或styleClass屬性建議為表單元素明確指定id屬性497.3 JSF標(biāo)簽( 文本輸入)h:inputTexth:inputSecreth:inputTextarea50 7.3 JSF標(biāo)簽( 命令)h:comma

36、ndButtonh:commandLinkh:outputLink51 7.3 JSF標(biāo)簽( 選擇)h:selectBooleanCheckboxh:selectManyCheckboxh:selectOneRadioh:selectOneListboxh:selectManyListboxh:selectOneMenuh:selectManyMenu52選擇標(biāo)簽使用示例53聯(lián)系我private boolean contactMe;public void setContactMe(boolean newValue) contactMe = newValue;public boolean get

37、ContactMe() return contactMe; private SelectItem grades = new SelectItem(new Integer(1), 高中), new SelectItem(new Integer(2), ???, new SelectItem(new Integer(3), 本科), new SelectItem(new Integer(4), 碩士), new SelectItem(new Integer(5), 博士);public SelectItem getGrades () return grades; 7.3 JSF標(biāo)簽( 數(shù)據(jù)表格標(biāo)簽

38、)UIData 組件表示 h:dataTable 標(biāo)簽,它支持將數(shù)據(jù)綁定到數(shù)據(jù)對象集合,遍歷數(shù)據(jù)源中的每個(gè)記錄表內(nèi)的數(shù)據(jù)列由 UIColumn 組件表示,即h:column標(biāo)簽54屬性說明bgcolor 設(shè)置表格背景色border 設(shè)置表格邊框?qū)挾萩ellpadding 設(shè)置表格單元格周圍的邊距cellspacing 設(shè)置表格單元格之間的間距first 表格中所顯示的第一行的索引frame 指定表格四周的邊框樣式;有效值:none、above、below、hsides、vsides、lhs、rhs、box、borderstyleClass指定整個(gè)表格的CSS類rowClasses 行的 CSS

39、 類列表,用逗號分隔列表columnClasses 列的CSS 類列表,用逗號分隔列表headerClass 表格標(biāo)題的 CSS 類footerClass 用于表格頁腳的 CSS 類rules單元格之間的行樣式;有效值:groups、rows、columns、all var數(shù)據(jù)表格所創(chuàng)建的變量名稱,表示該值中的當(dāng)前項(xiàng)目數(shù)據(jù)表格使用示例1在網(wǎng)頁中輸出一個(gè)簡單的表格,顯示一個(gè)職員的姓名和職位55示例代碼56public class EmployeeList private String name; private String position; public EmployeeList(Strin

40、g name, String position) = name; this.position = position; public void setName(String name) = name; public void setPosition(String position) this.position = position; public String getName() return name; public String getPosition() return position; EmployList.javapublic class Data private static fin

41、al EmployeeList employeelist = new EmployeeList new EmployeeList(高俠, 軟件工程師), new EmployeeList(張小麗, 培訓(xùn)師), new EmployeeList(劉亞平, 項(xiàng)目經(jīng)理), new EmployeeList(牛遠(yuǎn), 軟件工程師) ; public EmployeeList getEmployeelist() return employeelist; 受管理Bean Data index.jsp數(shù)據(jù)表格使用示例2練習(xí)如何從數(shù)據(jù)庫中提取數(shù)據(jù),然后將查詢結(jié)果顯示在數(shù)據(jù)表格中。要求為數(shù)據(jù)表格設(shè)置樣式57樣式表

42、58.customers border: thin solid black;.customersHeader text-align: center; font-style: italic; color: Snow; background: Teal;.evenColumn height: 25px; text-align: center; background: MediumTurquoise;.oddColumn text-align: center; background: PowderBlue;styleClass.css受管理Bean該后臺Bean負(fù)責(zé)同數(shù)據(jù)庫建立連接,并查詢數(shù)據(jù) 59

43、public class CustomerBean String sDBDriver = com.microsoft.jdbc.sqlserver.SQLServerDriver; String sConnStr = jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=northwind; Connection connect = null; public CustomerBean() try Class.forName(sDBDriver); catch (java.lang.ClassNotFoundException e) Syst

44、em.err.println(e.getMessage(); try connect = DriverManager.getConnection(sConnStr, sa, ); catch (SQLException ex) System.err.println(ex.getMessage(); CustomerBean.javapublic synchronized ResultSet executeQuery(String sql) ResultSet rs = null; if (connect != null) try Statement stmt = connect.createS

45、tatement(); rs = stmt.executeQuery(sql); catch (SQLException ex) System.err.println(ex.getMessage(); return rs; public synchronized int executeUpdate(String sql) int rs = -1; if (connect != null) try Statement stmt = connect.createStatement(); rs = stmt.executeUpdate(sql); catch (SQLException ex) Sy

46、stem.err.println(ex.getMessage(); return rs; public Result getAll() throws SQLException try CustomerBean jc = new CustomerBean(); String sql = select * from Customers; ResultSet rs = jc.executeQuery(sql); return ResultSupport.toResult(rs); finally closeConnection(); public void closeConnection() if

47、(connect != null) try connect.close(); catch (SQLException ex) System.err.println(ex.getMessage(); 視圖頁60Displaying Database Tables index.jsp7.4 JSF運(yùn)行流程和生命周期JSF是一個(gè)Web應(yīng)用,也會遵循請求/響應(yīng)的架構(gòu),與JSP的生命周期完全相似:客戶端發(fā)送一個(gè)HTTP請求,服務(wù)器端對請求進(jìn)行處理之后,向客戶端送回HTTP響應(yīng),整個(gè)JSP生命周期完成。JSF將請求/響應(yīng)的生命周期細(xì)化為更多階段,從而支持更加復(fù)雜的UI組件模型7.4 JSF運(yùn)行流程和生命周

48、期JSF將用戶請求分成兩種:初始請求:當(dāng)用戶直接向某個(gè)頁面發(fā)送請求時(shí),請求沒有附加任何的參數(shù)信息。提交表單:單擊表單的提交按鈕、提交超鏈接時(shí),就會發(fā)生提交表單請求。7.4 JSF運(yùn)行流程和生命周期JSF的6個(gè)生命周期:7.4 JSF運(yùn)行流程和生命周期恢復(fù)視圖階段:當(dāng)客戶端向某個(gè)JSF頁面發(fā)送請求時(shí),例如單擊了某個(gè)超鏈接或者按鈕時(shí),JSF就開始恢復(fù)視圖階段。在這個(gè)階段,JSF將會為該頁面創(chuàng)建對應(yīng)的視圖,并將事件監(jiān)聽器、輸入校驗(yàn)器等連接到頁面所包含的UI組件上,使用FacesContext實(shí)例來保存視圖對象。如果是初始請求:JSF將在該階段創(chuàng)建一個(gè)新的視圖對象,并將生命周期階段直接推進(jìn)到生成響應(yīng)階

49、段。7.4 JSF運(yùn)行流程和生命周期應(yīng)用請求值階段:當(dāng)視圖恢復(fù)完成后,每個(gè)組件都會調(diào)用它的decode方法從請求參數(shù)中提取新的參數(shù)值,并保存在本地組件上。如果頁面的某個(gè)組件設(shè)置了immediate=“true”,這個(gè)階段還會處理這些組件相關(guān)的驗(yàn)證、轉(zhuǎn)換和事件等。這個(gè)階段結(jié)束后,所有組件都被設(shè)置成了他們的新值,所有消息和事件都被放入隊(duì)列。7.4 JSF運(yùn)行流程和生命周期處理輸入校驗(yàn)階段:處理UI組件注冊的輸入校驗(yàn)器,JSF會用各UI組件上的本地值和對應(yīng)輸入校驗(yàn)規(guī)則進(jìn)行比較,如果本地值無效,JSF就會把對應(yīng)的錯誤消息添加到FacesContext實(shí)例中,而JSF的生命周期也將直接推進(jìn)到生成響應(yīng)階段

50、,顯示頁面可以通過或者來顯示輸入校驗(yàn)的錯誤信息。7.4 JSF運(yùn)行流程和生命周期更新模型的值階段:通過了輸入校驗(yàn)之后,使用UI組件的本地值更新與之綁定的托管Bean(將用戶輸入的數(shù)據(jù)傳送給服務(wù)器端的托管Bean),JSF只會更新綁定到輸入組件的托管Bean。如果無法更新,則會生成錯誤信息,生命周期直接推進(jìn)到生成響應(yīng)階段,可以采用或來顯示錯誤信息。7.4 JSF運(yùn)行流程和生命周期調(diào)用應(yīng)用階段:在這個(gè)階段中,JSF將會處理應(yīng)用級別的事件,例如提交表單或鏈接到其他頁面。7.4 JSF運(yùn)行流程和生命周期生成響應(yīng)階段:在這個(gè)階段中,應(yīng)用準(zhǔn)備向客戶端輸出響應(yīng)。當(dāng)在應(yīng)用請求值階段、處理階段或更新模型階段遇到

51、了錯誤,應(yīng)用將會選擇生成最初的頁面。生成響應(yīng)后,應(yīng)用的響應(yīng)狀態(tài)也被保存下來。7.4 JSF運(yùn)行流程和生命周期JSF提供了PhaseId類來代表生命周期階段,是一個(gè)枚舉類,常常使用的常量有:ANY_PHASE:任意一個(gè)生命周期階段RESTORE_VIEW:恢復(fù)視圖階段APPLY_REQUEST_VALUES:應(yīng)用請求值階段PROCESS_VALIDATIONS:處理輸入校驗(yàn)階段UPDATE_MODEL_VALUES:更新模型的值階段INVOKE_APPLICATION:調(diào)用應(yīng)用階段RENDER_RESPONSE:生成響應(yīng)階段7.5 數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證轉(zhuǎn)換器(Converter)協(xié)助模型與視圖之間的數(shù)

52、據(jù)轉(zhuǎn)換。標(biāo)準(zhǔn)轉(zhuǎn)換器自定義轉(zhuǎn)換器驗(yàn)證器(Validator)協(xié)助進(jìn)行語意檢驗(yàn)(Semantic Validation)。標(biāo)準(zhǔn)驗(yàn)證器自定義驗(yàn)證器7.5 數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證標(biāo)準(zhǔn)轉(zhuǎn)換器由瀏覽器傳送的數(shù)據(jù)基本上都是字符串,而Java應(yīng)用程序本身基本上則是對象,所以對象數(shù)據(jù)必須轉(zhuǎn)換后傳送給瀏覽器,而瀏覽器送來的數(shù)據(jù)也必須轉(zhuǎn)換為對象才能使用。JSF定義了一系列標(biāo)準(zhǔn)的轉(zhuǎn)換器(Converter),對于基本數(shù)據(jù)類型(primitive type)或是其Wrapper類可進(jìn)行自動轉(zhuǎn)換。(JSF會使用javax.faces.Boolean、javax.faces.Byte、javax.faces.Character、j

53、avax.faces.Double、javax.faces.Float、 javax.faces.Integer、javax.faces.Long、javax.faces.Short等自動進(jìn)行轉(zhuǎn)換,對于 BigDecimal、BigInteger,則會使用javax.faces.BigDecimal、javax.faces.BigInteger自動進(jìn)行轉(zhuǎn)換。)7.5 數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證標(biāo)準(zhǔn)轉(zhuǎn)換器DateTime、Number,我們可以使用、標(biāo)簽進(jìn)行轉(zhuǎn)換。示例: UserBean.javapackage com.tata;import java.util.Date;public class User

54、Bean private Date date = new Date();public Date getDate() return date;public void setDate(Date date) this.date = date;7.5 數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證標(biāo)準(zhǔn)轉(zhuǎn)換器 index.jsp 轉(zhuǎn)換器示范設(shè)定的日期是:7.5 數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證自定義轉(zhuǎn)換器要實(shí)現(xiàn)javax.faces.convert.Converter接口這個(gè)接口有兩個(gè)要實(shí)現(xiàn)的方法:第一個(gè)方法:接收從客戶端經(jīng)由HTTP傳來的字符串?dāng)?shù)據(jù),在該方法中將之轉(zhuǎn)換自定義對象。第二個(gè)方法:將Bean對象轉(zhuǎn)換為字符串,由HTTP傳回給客戶端。publ

55、ic Object getAsObject(FacesContext context, UIComponent component, String str);public String getAsString(FacesContext context, UIComponent component, Object obj);7.5 數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證自定義轉(zhuǎn)換器示例: User.java(轉(zhuǎn)換器的目標(biāo)對象)package com.tata;public class User private String firstName;private String lastName;public String

56、getFirstName() return firstName;public void setFirstName(String firstName) this.firstName = firstName;public String getLastName() return lastName;public void setLastName(String lastName) this.lastName = lastName;7.5 數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證自定義轉(zhuǎn)換器應(yīng)用目標(biāo):對GuestBean上的屬性user直接傳回或接受User類型的參數(shù) GuestBean.javapackage com.tata;

57、public class GuestBean private User user;public void setUser(User user) this.user = user;public User getUser() return user;7.5 數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證自定義轉(zhuǎn)換器定義轉(zhuǎn)換器,實(shí)現(xiàn)HTTP字符串與User對象進(jìn)行轉(zhuǎn)換 UserConverter.javapackage com.tata;import javax.facesponent.UIComponent;import javax.faces.context.FacesContext;import javax.faces.co

58、nvert.Converter;import javax.faces.convert.ConverterException;public class UserConverter implements Converter public Object getAsObject(FacesContext context, UIComponent component,String str) throws ConverterException String strs = str.split(,);User user = new User();try user.setFirstName(strs0);use

59、r.setLastName(strs1); catch(Exception e) / 轉(zhuǎn)換錯誤,簡單的丟出例外throw new ConverterException();return user; (接下一頁.)7.5 數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證自定義轉(zhuǎn)換器定義轉(zhuǎn)換器,實(shí)現(xiàn)HTTP字符串與User對象進(jìn)行轉(zhuǎn)換 UserConverter.javapublic class UserConverter implements Converter public String getAsString(FacesContext context, UIComponent component,Object obj) th

60、rows ConverterException String firstName = (User) obj).getFirstName();String lastName = (User) obj).getLastName();return firstName + , + lastName;7.5 數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證自定義轉(zhuǎn)換器在faces-config.xml中完成注轉(zhuǎn)換器 faces-config.xml/*show/pages/index.jsp(接下一頁.)7.5 數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證自定義轉(zhuǎn)換器在faces-config.xml中注冊轉(zhuǎn)換器 faces-.tata.Usercom.tata.U

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論