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