日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

使用 Translator 模式構(gòu)建更好的網(wǎng)站(6)_Windows教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!
servlet 執(zhí)行的第一個操作就是從 HttpServletRequest 中獲取 Translator 對象的一個實(shí)例。

  隨后 servlet 使用 processForm() 方法將對所提交的 HTML 表單的處理委派給 Translator。
 
  在 Translator 分析表單之后,servlet 將確定是否需要從第二存儲中創(chuàng)建或檢索業(yè)務(wù)對象(示例中的 Loan)。

  在 servlet 擁有業(yè)務(wù)對象的一個實(shí)例之后,servlet 就會調(diào)用 Translator 對象的 syncModelToGui()。syncModelToGui() 隨后將網(wǎng)站訪問者提交的全部值轉(zhuǎn)換為業(yè)務(wù)對象可識別的值。

  在 Translator 完成值的同步之后,servlet 將檢查當(dāng)試圖轉(zhuǎn)換網(wǎng)站訪問者輸入的值時,Translator 是否記錄了任何錯誤。

  如果沒有記錄任何錯誤,servlet 就會將網(wǎng)站訪問者重定向到確認(rèn)頁(通常是另一個 JSP 文件,它同樣能顯示來自 Translator 的值)。

  如果記錄了錯誤,servlet 就將網(wǎng)站訪問者重定向到輸入表單,這樣他就可以修正錯誤。

  3. Translator 對象

  因?yàn)?Translator 對象是 JSP 文件、servlet 和業(yè)務(wù)對象之間的聯(lián)系紐帶,所以要求它是有狀態(tài)的,并且要求它在 HTTP 請求(或線程)之間維護(hù)狀態(tài)。為了符合這個標(biāo)準(zhǔn),Translator 對象需要起到類似偽孤子 (pseudo singleton) 那樣的作用。Translator 類有五個主要部分,另外還有一個前面未曾提及的 Object Translator 類庫。

getInstance()
syncGuiToModel()
若干 getter 方法
processForm()
syncModelToGui()
Object Translators 庫

  為了調(diào)用 Translator 對象的一個實(shí)例,調(diào)用程序必須調(diào)用靜態(tài)方法 getInstance(HttpServletRequest)。getInstance() 方法將確定是否應(yīng)返回 Translator 的一個新實(shí)例,或者是否應(yīng)從 HttpSession 中重用某個實(shí)例。該方法通過查看定制參數(shù) action 來實(shí)現(xiàn)這一點(diǎn)。此參數(shù)是隨 HTTP 請求(例如,http://localhost/registerLoan.jsp?action=new)一起傳遞的。下面的樣例代碼段顯示了 getInstance() 的內(nèi)容:

public static LoanRegistrationTranslator getInstance(HttpServletRequest request)
{
// 聲明返回值變量。
LoanRegistrationTranslator lrtRV = null;

// HttpSession 是必需的,因此在此處將它提取出來。
HttpSession session = request.getSession();

// 從 request 對象中檢索 action 參數(shù)。
String sAction = parseString(request, ACTION);

// 確定我們要返回哪種 Translator。
if (ACTION_PROCESS.equals(sAction) == true)
{
// 因?yàn)?action 參數(shù)被設(shè)置為 process,這表示我們正在處理一個現(xiàn)有的
// Translator,所以從 HttpSession 中將這個 translator 提取出來。
lrtRV = (LoanRegistrationTranslator)
session.getValue(HttpSessionValueKeys.LOAN_REGISTRATION_TRANSLATOR);
}
else if (sAction == null || "".equals(sAction) == true ||
ACTION_NEW.equals(sAction) == true)
{
// 由于未設(shè)置或根本未傳遞 action,所以缺省操作是創(chuàng)建一個新的 translator。
// 另一種可能是 action 為 "new"
lrtRV = new LoanRegistrationTranslator();
session.putValue(HttpSessionValueKeys.LOAN_REGISTRATION_TRANSLATOR, lrtRV);
}
else
{
// 由于 action 不滿足前面的任何檢查,即 action 值是位于輔助存儲器中的
// 一個現(xiàn)有 Loan 的 ID,所以這次創(chuàng)建一個 LoanRegistrationTranslator,
// 其值被預(yù)設(shè)為已保存的 loan 中的值。
lrtRV = new LoanRegistrationTranslator(sAction);
session.putValue(HttpSessionValueKeys.LOAN_REGISTRATION_TRANSLATOR, lrtRV);
}

// 返回 Translator 對象的一個實(shí)例。
return lrtRV;
}

來源:網(wǎng)絡(luò)搜集//所屬分類:Windows教程/更新時間:2013-04-15
相關(guān)Windows教程