国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Win服務器 > 正文

使用 Translator 模式構建更好的網站(6)

2024-09-10 00:02:54
字體:
來源:轉載
供稿:網友
servlet 執行的第一個操作就是從 HttpServletRequest 中獲取 Translator 對象的一個實例。

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

  在 servlet 擁有業務對象的一個實例之后,servlet 就會調用 Translator 對象的 syncModelToGui()。syncModelToGui() 隨后將網站訪問者提交的全部值轉換為業務對象可識別的值。

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

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

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

  3. Translator 對象

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

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

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

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

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桓台县| 德钦县| 乌拉特前旗| 郯城县| 宜川县| 湖州市| 漠河县| 固阳县| 南岸区| 凯里市| 五河县| 金寨县| 海阳市| 鹤壁市| 枝江市| 永昌县| 梁平县| 民权县| 磐石市| 太原市| 巩留县| 湘乡市| 五河县| 佛山市| 铜梁县| 镇原县| 鄯善县| 潼南县| 苍梧县| 林周县| 什邡市| 东明县| 邛崃市| 湘乡市| 集安市| 丘北县| 万安县| 景洪市| 治多县| 北辰区| 太康县|