struts校验页面的输入是否符合要求有两种方式,每种方式又分为全局验证和局部验证两种。
第一种:在Action类中重写方法。
在action类中实现全局验证的步骤:
1、action类继承ActionSupport类。
2、重写validate方法,实现验证规则。
/*//全局验证,不通过跳转到input
@Override
public void validate()
{
if (user.getUsername().equals(""))
{
this.addFieldError("msg", "用户名不能为空");
}
else if (user.getUsername().length() < 6)
{
this.addFieldError("msg", "用户名长度不能小于6");
}
if (user.getPassword().equals(""))
{
this.addFieldError("msg", "密码不能为空");
}
}
*/
3、在核心文件struts.xml中配置input字符串与视图的映射(input字符串为不通过验证时返回的字符串)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default" >
<action name="userAction_*" class="com.caokaiyuan.action.UserAction" method="{1}">
<result name="register">success.jsp</result>
<result name="login">success.jsp</result>
<!-- 配置input字符串与视图的映射 -->
<result name="input">{1}.jsp</result>
</action>
</package>
</struts>
局部验证的步骤基本如全局验证,不同的是在局部验证时不是重写validate方法。而且局部验证的方法也要遵循一定的命名规制。
命名规制:validate + 要验证的方法名,方法名首字母大写
如下代码:只对userAction_login的请求时验证
package com.caokaiyuan.action;
import com.caokaiyuan.vo.UserVO;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class UserAction extends ActionSupport implements ModelDriven<UserVO>
{
private static final long serialVersionUID = 1L;
private UserVO user = new UserVO();
public String register() throws Exception
{
return "register";
}
public String login() throws Exception
{
return "login";
}
/*//全局验证,不通过跳转到input
@Override
public void validate()
{
if (user.getUsername().equals(""))
{
this.addFieldError("msg", "用户名不能为空");
}
else if (user.getUsername().length() < 6)
{
this.addFieldError("msg", "用户名长度不能小于6");
}
if (user.getPassword().equals(""))
{
this.addFieldError("msg", "密码不能为空");
}
}
*/
//局部验证
public void validateLogin()
{
if (user.getUsername().equals(""))
{
this.addFieldError("msg", "用户名不能为空");
}
else if (user.getUsername().length() < 6)
{
this.addFieldError("msg", "用户名长度不能小于6");
}
}
public UserVO getUser() {
return user;
}
public void setUser(UserVO user) {
this.user = user;
}
@Override
public UserVO getModel()
{
return user;
}
}
第二种:在xml文件中配置验证规则。
在xml文件中配置全局验证的步骤
1、在action的包下面建立action名称+validation的xml文件如(UserAction-validation.xml)
2、在action包下的xml文件进行验证规制(如在UserAction-validation.xml的配置)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<!-- 配置校验规则,用户名非空验证 -->
<validator type="requiredstring">
<!-- 要验证的字段 -->
<param name="fieldName">username</param>
<!-- 不通过是的返回值 -->
<message>用户名不为空!!</message>
</validator>
</validators>
3、、在核心文件struts.xml中配置input字符串与视图的映射(input字符串为不通过验证时返回的字符串)
局部验证的步骤只要把全局验证的xml文件的名称按一定的规制修改一下即可。
如把上面的UserAction-validation.xml修改为UserAction-userAction_login-validation.xml。
命名规制:action名称+ -要验证的请求的名称+ -validation