使用 Translator 模式構(gòu)建更好的網(wǎng)站(6)_Windows教程
隨后 servlet 使用 processForm() 方法將對所提交的 HTML 表單的處理委派給 Translator。
在 Translator 分析表單之后,servlet 將確定是否需要從第二存儲中創(chuàng)建或檢索業(yè)務(wù)對象(示例中的 Loan)。
在 servlet 擁有業(yè)務(wù)對象的一個實例之后,servlet 就會調(diào)用 Translator 對象的 syncModelToGui()。syncModelToGui() 隨后將網(wǎng)站訪問者提交的全部值轉(zhuǎn)換為業(yè)務(wù)對象可識別的值。
在 Translator 完成值的同步之后,servlet 將檢查當試圖轉(zhuǎn)換網(wǎng)站訪問者輸入的值時,Translator 是否記錄了任何錯誤。
如果沒有記錄任何錯誤,servlet 就會將網(wǎng)站訪問者重定向到確認頁(通常是另一個 JSP 文件,它同樣能顯示來自 Translator 的值)。
如果記錄了錯誤,servlet 就將網(wǎng)站訪問者重定向到輸入表單,這樣他就可以修正錯誤。
3. Translator 對象
因為 Translator 對象是 JSP 文件、servlet 和業(yè)務(wù)對象之間的聯(lián)系紐帶,所以要求它是有狀態(tài)的,并且要求它在 HTTP 請求(或線程)之間維護狀態(tài)。為了符合這個標準,Translator 對象需要起到類似偽孤子 (pseudo singleton) 那樣的作用。Translator 類有五個主要部分,另外還有一個前面未曾提及的 Object Translator 類庫。
| getInstance() syncGuiToModel() 若干 getter 方法 processForm() syncModelToGui() Object Translators 庫 |
為了調(diào)用 Translator 對象的一個實例,調(diào)用程序必須調(diào)用靜態(tài)方法 getInstance(HttpServletRequest)。getInstance() 方法將確定是否應(yīng)返回 Translator 的一個新實例,或者是否應(yīng)從 HttpSession 中重用某個實例。該方法通過查看定制參數(shù) action 來實現(xiàn)這一點。此參數(shù)是隨 HTTP 請求(例如,http://localhost/registerLoan.jsp?action=new)一起傳遞的。下面的樣例代碼段顯示了 getInstance() 的內(nèi)容:
|
public static LoanRegistrationTranslator getInstance(HttpServletRequest request) // HttpSession 是必需的,因此在此處將它提取出來。 // 從 request 對象中檢索 action 參數(shù)。 // 確定我們要返回哪種 Translator。 // 返回 Translator 對象的一個實例。 |
- 相關(guān)鏈接:
- 教程說明:
Windows教程-使用 Translator 模式構(gòu)建更好的網(wǎng)站(6)
。