struts框架搭建及validator示例

包看就会,如果哪没看懂,欢迎评论区留言交流

前置

配置tomcat

0 项目地址

地址
结构

在这里插入图片描述

1 创建web工程

    参考链接
    根据需要选择合适的tomcat

在这里插入图片描述

2 lib下导入jar包

struts、jakarta-oro
    其中jakarta-oro和commons-validator是因为validation框架导入的,其余是struts所必须的。(当然也可以去我的项目里面下载jar)
[图片上传失败...(image-27751e-1600337777042)]

3 写代码

1 创建struts项目

(1)LoginAction.java

package validate;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
    private static final long serialVersionUID = 1L;
    private String a;
    public String getA() {
        return a;
    }
    public void setA(String a) {
        this.a = a;
    }
    @Override
    public String execute() throws Exception {
        System.out.println("action方法execute");
        if (getA().equals("admin")) {
            return SUCCESS;
        } else {
            super.addActionError("用户名错误!");
            return INPUT;
        }
    }
}

(2)struts的相关xml
    利用include标签,将一个struts.xml配置文件分割成多个配置文件,比较清晰

struts-validate.xml






    
        
            /WEB-INF/pages/validate/success.jsp
            /WEB-INF/pages/validate/index.jsp
        
    

struts.xml




    

(3)web.xml



  struts-validation
  
    /WEB-INF/pages/validate/index.jsp
  
    
    
        struts2
       
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
       
    
    
        struts2
        /*
    

(4)jsp

  • validate="true"是开启验证,创建struts项目时可将此句删除
    index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="Java"
    import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>


    
        登录
        
            
            
            
        
        
    

success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="Java"
    import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>


    
        成功
    

2 添加validate

1 相关知识
  • 1 validation.xml和*Action.java放在一起
  • 2 validation.xml命名规则
    (1)-validation.xml
        ActionClassName放的是要验证Action类的名字
    (2)--validation.xml
        actionName指struts.xml里面配置的action name,如LoginAction-login-validation.xml
  • 3 s:form具备输出校验错误的能力
  • 4 前面struts.xml配置input,是为了让校验失败后,返回index.jsp
2 代码
  • 对b的校验采取的是自定义validator
    LoginAction-validation.xml



    
        
             此项必输
        
        
             3
            长度必须大于3
        
    
    
        
            b
            bbbbb
         
    
 

BValidator.java

package validate;
import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
public class BValidator extends FieldValidatorSupport {
    private String b;
    @Override
    public void validate(Object object) throws ValidationException {
        //获取字段名
        String fieldName = super.getFieldName();
        String value = (String)super.getFieldValue(fieldName,object);
        System.out.println("自定义validator"+fieldName+","+value);
        if(value == null || value == "") {
            //使LoginAction-validation.xml中b的message可以显示
            this.addFieldError(fieldName, object);
            //添加校验错误,和上一条语句任选其一即可
            this.getValidatorContext().addFieldError(fieldName, this.getValidatorContext().getText(value+"b为空"+b));
            return;
        }
    }
}

validators.xml



       


  
 

4 启动中遇到的问题

(1)Caught Exception while registering Interceptor class org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor - interceptor - jar:file:/D:/eclipse/tools/apache-tomcat-7.0.86-windows-x64/apache-tomcat-7.0.86/wtpwebapps/struts-validation/WEB-INF/lib/struts2-core-2.3.37.jar!/struts-default.xml:222:127

解决:配置离线dtd(dtd资源),当然也可以在我的代码中找,就在src目录下面
配置方法:参考
(2)警告: No configuration found for the specified action: 'Login' in namespace
若是struts中配置了namespace="/",但s:form中没有配置,则会出现
(3)Local DTD is missing for publicID: -//OpenSymphony Group//XWork Validator 1.0.2
解决:更换LoginAction-validation.xml开头为




提升

struts2权威指南pdf完整版+源代码
链接 提取码:seks

你可能感兴趣的:(struts框架搭建及validator示例)