|
||||
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"); 这里是验证失败的截图:
失败信息会放到一个列表中,因为有可能一次报出多个错误来。 通常,这类页面需要美工进行处理。 |
|||