struts2 验证框架
重写ActionSupport类的validate()方法 , 进行手动验方式
做一个表单, 提交用户名和密码到action, 并加上<s:fielderror></s:fielderror>
标签作为错误信息的打印
<body>
<s:fielderror></s:fielderror>
<s:form action="user_login">
<s:textfield name="name" label="用户名"></s:textfield>
<s:textfield name="pwd" label="密码"></s:textfield>
<s:submit value="登录"></s:submit>
</s:form>
</body>
struts.xml采用通配符方式:
<struts>
<package name="demo" extends="struts-default" namespace="/">
<action name="user_*" class="from.From1Action" method="{1}">
<result name="success">success.jsp</result>
<result name="input">index.jsp</result>
</action>
</package>
</struts>
在action中实现validate()方法, 在此方法中写验证代码, 并将错误的信息通过addFieldErro()方法保存,错误信息可以通过<s:fielderror></s:fielderror>
输出到前台界面上
public class From1Action extends ActionSupport {
String name;
String pwd;
public String login(){
return Action.SUCCESS;
}
//实现验证
@Override
public void validate() {
System.out.println("jsss"+name+pwd);
if (name == null || "".equals(name.trim())){
this.addFieldError("nameMsg", "用户名不能为空");
}else{
Pattern p = Pattern.compile("\\w{6,20}");
Matcher m = p.matcher(name.trim());
if (!m.matches()){
this.addFieldError("nameMsg", "用户格式错误");
}
}
if (pwd == null || "".equals(pwd.trim())){
this.addFieldError("pwdMsg", "密码不能为空");
}else{
int len = pwd.trim().length();
if (len <6 || len >30){
this.addFieldError("pwdMsg", "密码在6-30之间");
}
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
验证:
有时候action类中不只是处理一个表单, 有可能是多个, 这时候用validateXxx 的方法进行验证,添加一个注册的jsp界面如下:
<body>
<s:fielderror></s:fielderror>
注册
<s:form action="user_reg">
<s:textfield name="name" label="用户名"></s:textfield>
<s:textfield name="pwd" label="密码"></s:textfield>
<s:submit value="登录"></s:submit>
</s:form>
</body>
下面的action就可以同时验证注册和登录的两个表单
public class From1Action extends ActionSupport {
String name;
String pwd;
public String login(){
return Action.SUCCESS;
}
public String reg(){
return Action.SUCCESS;
}
//实现登录验证
public void validateLogin() {
System.out.println("jsss"+name+pwd);
if (name == null || "".equals(name.trim())){
this.addFieldError("nameMsg", "用户名不能为空");
}else{
Pattern p = Pattern.compile("\\w{6,20}");
Matcher m = p.matcher(name.trim());
if (!m.matches()){
this.addFieldError("nameMsg", "用户格式错误");
}
}
if (pwd == null || "".equals(pwd.trim())){
this.addFieldError("pwdMsg", "密码不能为空");
}else{
int len = pwd.trim().length();
if (len <6 || len >30){
this.addFieldError("pwdMsg", "密码在6-30之间");
}
}
}
//实现注册验证
public void validateReg() {
System.out.println("jsss"+name+pwd);
if (name == null || "".equals(name.trim())){
this.addFieldError("nameMsg", "用户名不能为空");
}else{
Pattern p = Pattern.compile("\\w{6,20}");
Matcher m = p.matcher(name.trim());
if (!m.matches()){
this.addFieldError("nameMsg", "用户格式错误");
}
}
if (pwd == null || "".equals(pwd.trim())){
this.addFieldError("pwdMsg", "密码不能为空");
}else{
int len = pwd.trim().length();
if (len <6 || len >30){
this.addFieldError("pwdMsg", "密码在6-30之间");
}
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
因为有错误信息返回的是“input”转向的jsp不同, 所以还要修改struts.xml
<struts>
<package name="demo" extends="struts-default" namespace="/">
<action name="user_login" class="from.From1Action" method="login">
<result name="success">success.jsp</result>
<result name="input">index.jsp</result>
</action>
<action name="user_reg" class="from.From1Action" method="reg">
<result name="success">success.jsp</result>
<result name="input">reg.jsp</result>
</action>
</package>
</struts>
验证:
基于xml文件的验证框架
这种方式不需要重写validate()方法, 只需要一个xml文件就能搞定 , 通过下面这个注册表单来体会下
<body>
注册
<s:form action="user_reg">
<s:textfield name="user.name" label="用户名"></s:textfield>
<s:password name="user.pwd" label="密码"></s:password>
<s:password name="qdpwd" label="确定密码"></s:password>
<s:textfield name="user.phone" label="手机号"></s:textfield>
<s:textfield name="user.email" label="邮箱"></s:textfield>
<s:submit value="登录"></s:submit>
</s:form>
</body>
创建user类
public class User {
String name;
String pwd;
String phone;
String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
action类, 确定密码并没有放在user类中
public class From1Action extends ActionSupport {
User user;
String qdpwd;
@Override
public String execute() throws Exception {
return super.execute();
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getQdpwd() {
return qdpwd;
}
public void setQdpwd(String qdpwd) {
this.qdpwd = qdpwd;
}
}
接着开始配置xml , 在Action类的同包目录下创建ClassName-validation.xml,我这里就是From1Action-validation.xml, 编写以下代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!-- 验证用户名 -->
<field name="user.name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message>用户名长度必须在${minLength}-${maxLength}之间</message>
</field-validator>
</field>
<!-- 验证密码 -->
<field name="user.pwd">
<field-validator type="requiredstring">
<message>密码不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<message>密码长度必须大于等于${minLength}</message>
</field-validator>
</field>
<!-- 验证重复密码 -->
<field name="qdpwd">
<field-validator type="requiredstring">
<message>确定密码不能为空</message>
</field-validator>
<field-validator type="fieldexpression">
<param name="expression">user.pwd==qdpwd</param>
<message>密码和确定密码必须相同</message>
</field-validator>
</field>
<!-- 验证手机号 -->
<field name="user.phone">
<field-validator type="requiredstring">
<message>手机号 不能为空</message>
</field-validator>
<field-validator type="regex">
<param name="expression">^1[3578]\d{9}$</param>
<message>电话号码格式不正确</message>
</field-validator>
</field>
<!-- 验证邮箱 -->
<field name="user.email">
<field-validator type="requiredstring">
<message>邮箱不能为空</message>
</field-validator>
<field-validator type="email">
<message>邮箱格式不正确</message>
</field-validator>
</field>
</validators>
验证
还没有评论,来说两句吧...