JBoss Seam:一個深度整合框架(二)
本文是《JBoss Seam:一個深度整合框架》一文的第二部分,JBoss Seam中文站將在近期釋出該文的第三部分。
支援在JSF中進行JPA延遲載入
ORM框架重要特徵之一就是支援相關物件的”延遲載入”。沒有延遲載入,即使簡單的物件查詢也有可能順帶出大量資料到結果集中,因為在對映物件圖中,可能所有的表都是潛在關聯的。
例如,在顯示訂單列表的Web應用程式中,你可能需要在控制器中查詢訂單物件。然後,當頁面被載入後,你可能需要顯示列表中相應的條目。
在頁面載入的時候,我們將”延遲載入”訂單條目到訂單物件中,而不會在控制器中查詢訂單物件時,就將所有與訂單關聯的物件都載入到訂單物件中。
然而,在傳統的MVC框架中應用”延遲載入”可不是一件容易的事情。在Seam之前的MVC框架中,控制器會在持久化環境中通過會話在事務中執行查詢,然後在事務提交時關閉會話。所以,當控制器退出、網頁顯示完成後,持久化環境將變成不可用狀態。
這樣,在以前的MVC框架中,如果想在顯示頁面中試圖”延遲載入”資料,持久化引擎將丟擲”lazy initialization exception”異常。
你可以通過”Open Session In View”模式實現”延遲載入”--在頁面生成階段保持持久會話。但是應用這種模式,需要在Web框架和持久層框架之間編寫大量的整合程式碼。
Seam預設支援”Open Session In View”。所有的Seam元件,除了EJB3中的無狀態會話Beans以外,都是有狀態的。在開始從UI事件呼叫資料庫操作一直到響應頁面生成期間, Seam將維持一個開啟的持久會話。在Seam應用中,開發人員不需要編寫額外的程式碼來實現”延遲載入”。
在JSF輸入頁面中支援Hibernate驗證
在多層企業級應用中,Web框架和ORM持久層框架通常會有不同的資料驗證機制。Web框架在Web表單被提交時驗證使用者輸入,而持久層框架在儲存資料進資料庫之前驗證資料。在大多數情況下,它們顯得多餘。
Seam允許你在實體Beans中直接註解資料驗證約束,這樣使用與實體Beans相聯絡的JSF輸入框時,同樣的驗證約束將應用於輸入資料。
下面的例子中,Person物件的名字必須由兩個單片語成,並且年齡必須在3到100歲之間。
@Entity
@Name(”person”)
@Table(name=”extperson”)
public class Person implements Serializable {
private long id;
private String name;
private int age;
@Id @GeneratedValue
public long getId() { return id;}
public void setId(long id) { this.id = id; }
@NotNull
@Pattern(regex=”^[a-zA-Z.-]+ [a-zA-Z.-]+”,
message=”Need a firstname and a lastname”)
public String getName() { return name; }
public void setName(String name) {this.name = name;}
@NotNull
@Range(min=3, max=100,
message=”Age must be between 3 and 100″)
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
下面的JSF頁面將自動”包裝”一些驗證邏輯。如果使用者提交無效值,將重新顯示頁面,同時高亮顯示無效的欄位。
Your name:
Your age:
你可以通過簡單的JSF facets和CSS樣式配置這些高亮顯示的錯誤資訊。也可以在無效欄位前加入有CSS樣式修飾的錯誤提示圖片。如下所示,當驗證失敗時,
使用基於Ajax的JSF控制元件,你無需提交任何表單,就可以進行輸入欄位的驗證。
多種方式使用Ajax
作為一個現代的應用程式框架,Seam為Ajax應用提供了最好的支援。
在Seam中,你可以通過很多方式使用Ajax。初學者可以使用Seam整合的Ajax JSF元件包,比如Ajax4jsf、RichFaces和IceFaces。它們提供了一系列Ajax功能的JSF控制元件,包括輸入框、資料表格、互動面 板、拖放皮膚等,你可以直接將它們用在你的頁面上。這些Ajax控制元件允許你開發Ajax Web應用程式,而無需寫一行JavaScript程式碼。Seam已經幫你做好了所有和Ajax整合的工作,使得建立Ajax應用比在單純的JSF環境中 更容易。下面的例子顯示瞭如何使用Ajax資料輸入框,當你離開輸入框時,資料將被驗證,同時無效的欄位將高亮顯示。
Your name:
Your age:
考慮到開發人員想直接使用JavaScript取代JSF控制元件,Seam同樣也整合了JavaScript和伺服器端元件。你可以像呼叫本地 JavaScript方法一樣呼叫Seam元件的方法並且在本地使用返回值。開發人員也可以通過Seam服務整合其他流行的JavaScript庫。例 如,下面的程式碼顯示瞭如何通過Seam元件整合Dojo的”內嵌文字編輯器”,當你雙擊”Hello World”文字時,將出現內嵌的文字編輯器;編輯完成後,輸入值將被傳回伺服器處理。
// Seam.Remoting.setDebug(true);
// don’t display the loading indicator
Seam.Remoting.displayLoadingMessage = function() {};
Seam.Remoting.hideLoadingMessage = function() {};
// Get the “manager” Seam component
var manager = Seam.Component.getInstance(”manager”);
function init () {
var commentEditor = dojo.widget.byId(”comment”);
commentEditor.onSave = submitComment;
}
function submitComment (newValue, oldValue) {
manager.setComment (newValue);
}
dojo.addOnLoad(init);
下面程式碼顯示了通過JavaScript遠端呼叫訪問Manager元件。
@Name(”manager”)
public class Manager {
@In @Out
private Person person;
public void setComment (String comment) {
person.setComment (comment);
}
… …
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13270562/viewspace-244008/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JBoss Seam:一個深度整合框架(一)框架
- 關於JBOSS的SEAM框架框架
- seam2.0整合resteasy框架的配置REST框架
- 請大家關注一下Jboss seam專案
- 翻譯:JBoss Seam 2.0蹦達出來了
- 從Python & Zope到Java with EJB 3 & JBoss SEAMPythonJava
- Seam應用程式框架框架
- Seam無縫整合 JSF: 藉助 Seam 進行對話JS
- Swoole 整合成一個小框架框架
- 有JBOSS seam的詳細開發資料嗎
- JBoss釋出了支援Groovy並增強了JSF的Seam 2.0JS
- 關注JBoss SEAM 1.0,重新定義的web應用架構Web應用架構
- Gavin King真正走上EJB路線,推出基於JSF/EJB3的快速開發框架JBoss SeamJS框架
- 深度:從零編寫一個微前端框架前端框架
- 自己寫一個mvc框架吧(二)MVC框架
- JbuilderX如何整合JBoss4.0UI
- Spring+SpringMvc+Mybatis框架整合搭建教程二(依賴配置及框架整合)SpringMVCMyBatis框架
- JBOSS與JBuilder的整合問題!UI
- 10 個值得一試的開源深度學習框架深度學習框架
- 一個jboss的應用問題
- The Seam: J2EE 5.0 應用開發框架框架
- Seam: 為 JSF 量身定做的應用程式框架JS框架
- 從零開始實現一個RPC框架(二)RPC框架
- PHP在一個框架中使用另一個框架PHP框架
- 配置Seam元件元件
- 支付寶小程式框架淺析及如何在 mPaaS 內深度整合框架
- SSM框架整合SSM框架
- 整合SSM框架SSM框架
- SSH框架整合框架
- 正在選開源專案構造一個整合框架,請各位高手給個意見框架
- 分享一個整合SSM框架的高併發和商品秒殺專案SSM框架
- keras框架下的深度學習(二)二分類和多分類問題Keras框架深度學習
- 哪一個深度學習框架增長最迅猛?TensorFlow 還是 PyTorch?深度學習框架PyTorch
- 從零開始打造一個iOS圖片載入框架(二)iOS框架
- 淺析MyBatis(二):手寫一個自己的MyBatis簡單框架MyBatis框架
- 微服務框架-dubbo整合nacos框架微服務框架
- SSM框架的整合SSM框架
- CI 框架整合 PHPExcel框架PHPExcel