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