《Java EE 7精粹》—— 第3章 JSF 3.1 Facelets

本節書摘來異步社區《Java EE 7精粹》一書中的第2章,第2.1節,作者:【美】Arun Gupta,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。

第3章 JSF

JSF是基于Java的Web應用程序開發的服務器端用戶界面(UI)框架。使用JSF可以實現:

  • 使用遵循模型-視圖-控制器(MVC)設計模式的可重用的UI組件集合來創建網頁。
  • 綁定組件到服務器端模型,允許UI與應用程序數據雙向移動。
  • 處理UI事件響應和模型交互中的頁面導航。
  • 管理跨服務器請求的UI組件狀態。
  • 提供從客戶端生成的事件到服務器端應用程序代碼的簡單模型。
  • 輕松地構建和重用自定義UI組件。

JSF應用程序包括:

  • 置于UI組件的布局中的一組網頁。
  • 一組托管的Bean,包括綁定組件到服務器端模型的Bean(通常是CDI Bean)和作為控制器的Bean(通常是EJB或CDI Bean)。
  • 可選的部署描述符文件web.xml。
  • 可選的配置文件faces -config.xml。
  • 可選的一組自定義對象,包括應用程序開發人員創建的轉換器和監聽器。

3.1 Facelets

Facelets是JSF的視圖聲明語言(又名視圖處理器)。他是JSP的替代者,JSP現在只保留了向后兼容性。在JSF2規范中引入的新功能,如復合組件和Ajax,只會暴露給Facelets的使用者。Facelets的主要優點包括一個功能強大的模板系統,可重用和易于開發,更好的錯誤報告(包括行號),以及對設計人員友好。

Facelets頁面使用XHTML1.0和層疊樣式表(CSS)來編寫。XHTML1.0的文檔是遵循XML1.0規則書寫的HTML4文檔。頁面必須符合XHTML-1.0-Transitional DTD的要求。

使用XHTML定義的一個簡單的Facelets頁面如下:

0d2dcebfb3c625386abb18fe17755352d2fa58ce

在這段代碼中,XML聲明之后是文檔類型定義(DTD)。頁面的根元素是html,其中聲明了命名空間http://www.w3.org/1999/xhtml。聲明XML命名空間是為了在Web頁面中使用標簽庫,Facelets的html標簽(那些以h開頭的標簽)和普通的html標簽用于添加組件。

表3-1給出了Facelets支持的標準標簽庫集合。

9b3a356d9009fc192f130cd95a0041a80653813a

按照慣例,使用XHTML創建的Web頁面使用.xhtml作為擴展名。

Facelets提供表達式語言(EL)集成,這使得后臺Bean可以和前臺UI之間實現雙向的數據綁定:

b15265968026250a2e2c2b05c4db5fa458c53525

在這段代碼中,EL表達式#{name.value}代表請求作用域的CDI Bean的value字段的值:

5709f75a18f4e92d84ea377c8fbf09294a98b171

重要的是要為這個CDI Bean添加@Named注解,以使其可以依賴注入到EL表達式中。

在JSF2.2中,@javax.faces.bean.ManagedBean注解是未來的版本中不建議使用的,所以強烈建議使用@Named來代替。

JSF2.2還引入了新的CDI作用域:javax.faces.view.ViewScoped。在一個Bean上指定該注解,可以將這個Bean與當前視圖綁定。javax.faces.bean.ViewScoped注解是未來的版本中不建議使用的,所以強烈建議使用新引入的作用域。

同樣地,一個EJB可以在EL表達式注入:

53b78870426421b390435cdbbf0e867f557a1404

這是一個無狀態的會話Bean,包含一個返回客戶名稱列表的業務方法。@Named標記它可以依賴注入到EL表達式中,可以在Facelets的EL表達式中使用:

0ccb4d2cecd75eb6d89365f52373cec4a14e532f

在這段代碼中,客戶名稱列表的返回值顯示在一個表格組件當中。請注意getCustomerNames方法是如何作為一個屬性用在EL表達式中的。

Facelets還提供了編譯期EL表達式驗證。

此外,Facelets提供了一個功能強大的模板系統,使我們可以在一個Web應用程序的多個頁面之間提供一致的界面外觀。基礎頁面稱為模板,是通過Facelets的模板標簽創建的。這個頁面為Web頁面定義了一個缺省頁面骨架,包括內容占位符,會在將來的頁面中使用模板來添肉。模板客戶端頁面使用這個模板,為模板骨架中定義的占位符提供具體的肉(實際的內容)。

表3-2列出了一些在模板和模板客戶端頁面中使用的通用標簽。

3e260b686c05e9ea9dfb3a2e3e63625b657b5a9e

模板頁面的外觀示例如下:

7eb69a88376ab50a7fc3e97f440ab6da5d197a8d

在這段代碼中,在頁面中使用

和CSS(在這里沒有顯示)定義結構。ui:insert定義了被模板客戶端頁面替換的內容。

模板客戶端頁面示例如下:

63515cdbc167fbb5dddb558fbe8e49064e60bb3e

在這段代碼中,名為top和bottom的ui:insert沒有定義,那么這些部分使用模板頁面的ui:define元素的名稱匹配模板中的ui:insert元素,因此模板的這部分內容被替換。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541476.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541476.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541476.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql5批處理_轉關于mysql5.5 的批處理討論(轉載)

MySql的JDBC驅動不支持批量操作(已結)MySql連接的url中要加rewriteBatchedStatements參數,例如String connectionUrl"jdbc:mysql://192.168.1.100:3306/test?rewriteBatchedStatementstrue";還要保證mysql JDBC驅的版本。MySql的JDBC驅動的批量插入操作性…

Java Duration類| isZero()方法與示例

持續時間類isZero()方法 (Duration Class isZero() method) isZero() method is available in java.time package. isZero()方法在java.time包中可用。 isZero() method is used to check whether this Duration object holds the value of length is 0 or not. isZero()方法用…

《C#多線程編程實戰(原書第2版)》——3.2 在線程池中調用委托

本節書摘來自華章出版社《C#多線程編程實戰(原書第2版)》一書中的第3章,第3.2節,作者(美)易格恩阿格佛溫(Eugene Agafonov),黃博文 黃輝蘭 譯,更多章節內容可…

mysql語句數據庫_數據庫的Mysql語句

數據庫的mysql語句: 1.連接數據庫 mysql -u root -p2.顯示數據庫 show databases(db);3.選擇數據庫 use 數據庫名;4.顯示數據庫中的表 show tables;基本數據操作:增刪改查1.增 :insert into 表名(字段1,字段2…)values (值1,值2…);2.刪 :delete from 表名 where 條件;3.改 :up…

java clock計時_Java Clock類| systemUTC()方法與示例

java clock計時Clock Class systemUTC()方法 (Clock Class systemUTC() method) systemUTC() method is available in java.time package. systemUTC()方法在java.time包中可用。 systemUTC() method is used to get a Clock that implements the suitable system clock in the…

《Android 應用測試指南》——第2章,第2.4節包瀏覽器

本節書摘來自異步社區《Android 應用測試指南》一書中的第2章,第2.4節包瀏覽器,作者 【阿根廷】Diego Torres Milano(迭戈 D.),更多章節內容可以訪問云棲社區“異步社區”公眾號查看 2.4 包瀏覽器創建完前面提到的兩個…

操作系統系統調用_操作系統中的系統調用

操作系統系統調用系統調用簡介 (Introduction to System calls) The interface between the operating system and the user program is defined by the set of extended instruction that the operating system provides. These extended instructions are known as system ca…

java分數表示_表示Java分數的最佳方法?

小編典典碰巧的是不久前我寫了一個BigFraction類,用于解決Euler項目問題。它保留了BigInteger分子和分母,因此它將永遠不會溢出。但是,對于許多你永遠不會溢出的操作來說,這會有點慢。無論如何,請根據需要使用它。我一…

《OpenStack云計算實戰手冊(第2版)》——1.7 添加用戶

本節書摘來自異步社區《OpenStack云計算實戰手冊(第2版)》一書中的第1章,第1.7節,作者: 【英】Kevin Jackson , 【美】Cody Bunch 更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.7 添加用戶 在OpenStack身份認證服務中…

開源軟件和自由軟件_自由和開源軟件的經濟學

開源軟件和自由軟件零邊際成本 (Zero Marginal Cost) At the core of the financial aspects of Free and Open Source is the zero negligible expense of merchandise in an environment that is digital. Right now, the rise of Free and Open Source speaks to an affirma…

java外部類_Java里什么叫內部類什么叫外部類

展開全部對普通類(沒有內部類的類)來說,62616964757a686964616fe78988e69d8331333337396234內部類和外部類都與他無關;對有內部類的類來說,它們就是其內部類的外部類,外部類是個相對的說法,其實就是有內部類的類。所以…

《精通Matlab數字圖像處理與識別》一6.2 傅立葉變換基礎知識

本節書摘來自異步社區《精通Matlab數字圖像處理與識別》一書中的第6章,第6.2節,作者 張錚 , 倪紅霞 , 苑春苗 , 楊立紅,更多章節內容可以訪問云棲社區“異步社區”公眾號查看 6.2 傅立葉變換基礎知識 精通Matlab數字圖像處理與識別要理解傅立…

多線程循環輸出abcc++_C ++循環| 查找輸出程序| 套裝5

多線程循環輸出abccProgram 1: 程序1&#xff1a; #include <iostream>using namespace std;int main(){int num 15673;int R1 0, R2 0;do {R1 num % 10;R2 R2 * 10 R1;num num / 10;} while (num > 0);cout << R2 << " ";return 0;}Ou…

java oql_深入理解java虛擬機(八):java內存分析工具-MAT和OQL

以下內容翻譯自MAT幫助文檔。一、Class HistogramClass Histogram shows the classes found in the snapshot, the number of objects for each class, the heap memory consumption of these objects, and the minimum retained size of the objects二、Dominator treeDomina…

《Python數據分析與挖掘實戰》一1.2 從餐飲服務到數據挖掘

本節書摘來自華章出版社《Python數據分析與挖掘實戰》一書中的第1章&#xff0c;第1.2節&#xff0c;作者 張良均 王路 譚立云 蘇劍林&#xff0c;更多章節內容可以訪問云棲社區“華章計算機”公眾號查看 1.2 從餐飲服務到數據挖掘 企業經營最大的目的就是盈利&#xff0c;而餐…

obj[]與obj._Ruby中帶有示例的Array.include?(obj)方法

obj[]與obj.Ruby Array.include&#xff1f;(obj)方法 (Ruby Array.include?(obj) Method) In the previous articles, we have seen how we can check whether two Array instances are identical or not with the help of <> operator, operator, and .eql? method?…

java javah_Java開發網 - 一個javah的問題

Posted by:jerry_xuPosted on:2006-03-13 15:39我在環境變量中已經設置了path為D:\Program Files\Java\jdk1.5.0_06&#xff0c;ClassPath設置為.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;class的路徑為&#xff1a;D:\JNItest\bin\jni\Hello.class &#xff0c;但是…

《Python面向對象編程指南》——2.7 __del__()方法

本節書摘來自異步社區《Python面向對象編程指南》一書中的第2章&#xff0c;第2.7節&#xff0c;作者&#xff3b;美&#xff3d;Steven F. Lott&#xff0c; 張心韜 蘭亮 譯&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.7 __del__()方法 __del__()方…

NullReferenceException C#中的異常

什么是NullReferenceException&#xff1f; (What is NullReferenceException?) NullReferenceException is an exception and it throws when the code is trying to access a reference that is not referencing to any object. If a reference variable/object is not refe…

java map key 大寫轉小寫_Spring JdbcTemplate 查詢出的Map,是如何產生大小寫忽略的Key的?(轉)...

Java 是區分大小寫的&#xff0c;普通的Map例如HashMap如果其中的key"ABC" value"XXX"那么map.get("Abc") 或 map.get("abc")是獲取不到值得。但Spring中產生了一個忽略大小寫的map使我產生了好奇例如 jdbcTemplate.queryForList(sql)…