第一种:重写ActionForm的validate方法。
在actionForm中需要验证的都是表单的验证而非业务的验证。比如用户名非空,密码为数字,日期为时间格式等等。在validate方法中,返回ActionErrors信息,然后在错误页打印错误信息。
[html]
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors=new ActionErrors();
if(username==null||"".equals(username)){
errors.add(username, new ActionMessage("error.username",username));
}
if(password==null || "".equals(password)){
errors.add("password",new ActionMessage("error.password",password));
}
if(!(birthday instanceof Date)){
errors.add("birthday",new ActionMessage("error.birthday",birthday));
}
return errors;
}
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors=new ActionErrors();
if(username==null||"".equals(username)){
errors.add(username, new ActionMessage("error.username",username));
}
if(password==null || "".equals(password)){
errors.add("password",new ActionMessage("error.password",password));
}
if(!(birthday instanceof Date)){
errors.add("birthday",new ActionMessage("error.birthday",birthday));
}
return errors;
}
代码解释:
使用这种ActionForm再带的验证方式,在配置文件中需要设置此action的validate属性为true,并且也要设置出现错误返回的错误页input属性。
struts-config.xml中action的配置如下:
[html]
<action-mappings>
<action path="/login" type="com.login.LoginAction" name="loginForm"
scope="request" input="/login/error.jsp" validate="true">
<forward name="success" path="/login/success.jsp"></forward>
<forward name="false" path="/login/false.jsp"></forward>
</action>
</action-mappings>
<action-mappings>
<action path="/login" type="com.login.LoginAction" name="loginForm"
scope="request" input="/login/error.jsp" validate="true">
<forward name="success" path="/login/success.jsp"></forward>
<forward name="false" path="/login/false.jsp"></forward>
</action>
</action-mappings>
其中为了把错误显示出来,我们使用资源文件方式。
在validate方法中,new ActionMessage("error.birthday",birthday)中的"error.birthday"是资源文件的key值。
配置文件中加载资源文件:
[html]
<!-- 加载资源文件 -->
<message-resources parameter="MessageResources" />
<!-- 加载资源文件 -->
<message-resources parameter="MessageResources" /> 注意资源文件放在src下。若是放在WebContent目录或web-inf下,则不会提示相应的错误信息。即使不报错。
并且上述的日期,其中使用Register注册了,上篇博客已经介绍,在此不再过多介绍。
这个action自带的验证的demo已经上传。点我下载。
第二种:使用validator框架。
其中validate验证,主要是由commons-validator.jar包。
那如何使用validator框架呢?
1.actionForm使用validator框架。
首先:编写actionForm
注意此时的actionForm不是继承ActionForm,而是继承ValidatorForm。
其中actionform中只有getset方法
其次:编写配置文件struts-config.xml中,加载验证插件以及使用资源文件。
[html]
<!-- 加载资源文件 -->
<message-resources parameter="MessageResources" />
<!-- 验证插件 -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
<!-- 加载资源文件 -->
<message-resources parameter="MessageResources" />
<!-- 验证插件 -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in> 其中,validator-rules.xml是公共的。而这个validation.xml是需要程序员编写。
然后:编写validation.xml验证信息。
[html]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<formset>
<!-- form 的name必须与struts-config中名称一致 -->
<form name="loginForm">
<field property="username" depends="required">
<!-- key值必须与资源文件中名称一致 -->
<arg key="error.username"/>
</field>
<field property="password" depends="required"> <
补充:Web开发 , Jsp ,