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

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

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

  隨后 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)
{
// 聲明返回值變量。
LoanRegistrationTranslator lrtRV = null;

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

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

// 確定我們要返回哪種 Translator。
if (ACTION_PROCESS.equals(sAction) == true)
{
// 因為 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 對象的一個實例。
return lrtRV;
}

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