|
||||
1.0 其他語言
|
||||
3.3.2 帶成功/失敗驗證的分發器 |
||||
|
有些請求需要在伺服器端進行驗證。比如,當使用者在網頁上建立一個訂單,提交到應用伺服器上。應用伺服器會檢查使用者輸入的資料,如果找到錯誤,就給出出錯資訊,比如訂單已經存在之類。 不止是新建/更新需要顯示成功/失敗頁面。某些其他型態的請求,同樣需要進行驗證。就像我們大家都知道的,當使用者登陸的時候,系統會檢查使用者的密碼。這是一個普通的帶驗證的查詢請求。 VelocityWeb 使用彈出窗口讓使用統一的成功/失敗頁面變得容易。當使用者收到一個失敗資訊,他/她可以關閉彈出窗口,在主窗口修正輸入的錯誤資料。成功要訣頁面會將主頁面導向新的頁面。比如,當使用者增加到一新的訂單到系統中,系統通常會轉到顯示訂單列表的頁面。 當使用者看到失敗要訣時,輸入的資料並不會遺失,因為要訣是位于彈出窗口中。輸入資料的窗口然後保留在那里。 這里有一個登陸的範例代碼,包含資料輸入頁面,登陸處理頁面。 public class LoginInputDispatcher extends QueryDispatcher { public boolean process(HttpServletRequest request, WebAppContext webContext, Controller controller) throws Exception { this.setHtmlTemplateFileName("user/login.htm"); this.setPageTitle("Login page"); webContext.put("result_win_url", DispatcherTreeManager.getUrl(ShowProcessResultDispatcher.class)); webContext.put("target_process_url", DispatcherTreeManager.getUrl(LoginProcessDispatcher.class)); //remember enter url, after login, jump to it. webContext.put("enter_url", request.getRequestURL().toString()); return true; } public String getUrlId() { return "login"; } } 類 ShowProcessResultDispatcher 會顯示成功或者失敗頁面,要看 LoginProcessDispatcher.process() 的回覆值。 String username = request.getParameter("username"); String password = request.getParameter("password"); // call service to check user name and password UserService userService = new UserService(webContext); boolean passed = userService.checkPassword(username, password); if (!passed) { List errorMsgList = new LinkedList(); errorMsgList.add("Login fail, user does not exist or wrong password."); webContext.put(controller.getDispatchFailMessageListTag(), errorMsgList); log.debug("LoginProcessDispatcher.process() fail end"); return false; } 每個專案/產品都需要有自己的成功/失敗頁面。可以在應用程式控制器的初始化部份指定。 public class PetStoreController extends SimpleController { ... public boolean initApplication() { ... // set process success template and fail template setDispatchFailTemplateFileName("system/dispatcher_fail.htm"); setDispatchSuccessTemplateFileName("system/dispatcher_success.htm"); setDispatchFailMessageListTag("fail_msg_list"); setDispatchSuccessMessageTag("success_msg"); setDispatchSuccessJumpUrlTag("jump_url"); setDispatchTargetUrlTag("target_dispatcher_url"); setDispatchSuccessStaySecondsTag("stay_seconds"); 這里是驗證失敗的截圖︰
失敗資訊會放到一個列表中,因為有可能一次報出多個錯誤來。 通常,這類頁面需要美工進行處理。 |
|||