页面流验证提供以下功能:
· 用户表单输入的服务端验证
· 用待验证的表单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 位网友发表了评论
查看所有评论
发表评论
|

