RSS
热门关键字:  下载  cms  模版  开源  dedecms
当前位置 :| 主页 > 站长学院 > JSP教程 >

页面流(Page flow)表单验证

来源:Java频道 作者:未知 时间:2006-08-11 Tag: 点击:
创建Web应用的过程中,验证用户在HTML表单中的输入是最常见的一个问题。用户输入数据必须被验证从而保证进行业务处理之前数据是正确的。输入的表单数据可能用于创建或更新数据库条目、调用Web服务、或作为业务过程的输入。基于目前由Struts提供的表单验证框架,页面流提供了一种简单易用的服务端验证方式。

页面流验证提供以下功能:
· 用户表单输入的服务端验证
· 用待验证的表单bean封装验证逻辑
· 验证失败时自动导航到输入页面
· 内置消息包支持,方便进行国际化
本文假定读者熟悉页面流及JSP。本文将介绍创建表单bean和验证页面的基本步骤。如果发生验证错误用户将会得到通知,从而可以修正它们;动作方法被调用时可以认为数据是正确的。


Request生命周期及验证

表单验证针对的是已提交表单bean中的内容。通过JSP页面的<netui:form> 标签的动作属性,该bean被间接选中;表单bean与指定动作相关联。表单bean继承自com.bea.wlw.netui.pageflow.FormData。为了验证表单bean,开发人员需要重载validate() 方法并提供验证逻辑。
图1演示了request的生命周期以及验证是如何发生的。当Strut的控制器接收到请求时,它将请求传递给页面流RequestProcessor。请求处理器的processPopulate 方法首先构造一个新的表单bean,其中含有来自请求的所有数据条目。此步骤将会创建FormData。然后请求处理器检查是否为动作激活了表单验证。如果验证被激活,将会针对该表单bean调用validate()方法。如果出现验证错误,控制权将交给一个输入页面,同时转交的还有用户输入的数据以及错误信息。如果没有发现错误,控制权将被传递给目标动作从而继续处理请求。
图1中的蓝色方框代表页面流代码,黑色方框代表用户代码。


图1——请求验证生命周期


通过简单的五个步骤就可以在页面流中进行验证。下面详细解释每个步骤。

步骤1——验证方法

验证用户输入的第一个步骤是在表单bean上创建validate()方法。该方法将会检查表单bean的属性,察看有没有用户输入错误。下面这个非常简单的表单bean定义了两个属性:name 和type。validate() 方法提供了对这些属性的验证。

 

  public static class NameBean extends FormData
  {
      private String name;
 
      private String type;
 
      public void setType(String type)
      {
          this.type = type;
      }
 
      public String getType()
      {
          return this.type;
      }
 
      public void setName(String name)
      {
          this.name = name;
      }
 
      public String getName()
      {
          return this.name;
      }
 
      public ActionErrors validate(ActionMapping mapping,
                      HttpServletRequest request)
      {
          ActionErrorserrors = new ActionErrors();
          if (name == null || name.equals("")) {
              errors.add("nameError",
              new ActionError("NullNameError"));
          }
          else {
              if (!Character.isUpperCase(name.charAt(0))) {
                  errors.add("nameError",
                    new ActionError("UpperCaseNameError",name));
              }
          }
          if (type == null || (!type.equals("bar") &&
                               !type.equals("foo"))) {
              errors.add("typeError",
              new ActionError("TypeError",type));
          }
          if (!errors.empty()) {
              request.setAttribute("errorNotSet",new Boolean(false));
          }
          return errors;
      }
  }

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册