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

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!
      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;
      }

      來源:網絡搜集//所屬分類:Windows教程/更新時間:2013-04-15
      相關Windows教程