Struts2--day02

作者: 键盘瞎 | 来源:发表于2017-01-22 21:32 被阅读114次

    非本人总结的笔记,抄点笔记复习复习。感谢传智博客和黑马程序猿


    记笔记啊记笔记

    结果页面的设置

    在action标签里面有一个result标签
    在result标签里面有属性name属性:根据action方法的返回值,配置到路径中
    在result标签里面还有一个type属性:配置如何到路径中(重定向和转发...)
    type属性值
    dispatcher:转发操作到jsp页面中(默认值)
    redirect:重定向操作到jsp页面中
    chain:转发到action中
    redirectAction重定向到action中
    演示效果
    在action中向request域设置值,分别设置result和type属性实现转发和重定向,到页面中获取request中的值。
    如果转发,值可以获取到,访问路径不变
    如果重定向,值不能获取到,访问路径改变

    配置页面
    创建action,TypeAction
    package cn.itcast.type.action;
    
    import javax.servlet.http.HttpServletRequest;
    
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    /**
     * 演示result标签的type配置
     * @author asus
     *
     */
    public class TypeAction extends ActionSupport {
    
        @Override
        public String execute() throws Exception {
            //向request域设置值
            HttpServletRequest request = ServletActionContext.getRequest();
            request.setAttribute("req", "requestValuetype");
            return SUCCESS;
        }
    }
    

    配置action,struts.xml

    <package name="typeaction" extends="struts-default" namespace="/">
            <action name="type" class="cn.itcast.type.action.TypeAction">
                <!-- 配置结果页面 
                type属性的值
                dispatcher: 转发操作到jsp页面中(默认值)
              redirect : 重定向操作到jsp页面中
    
              chain:转发到action中
              redirectAction:重定向到action中 -->
                <result name="success" type="redirect">/type/type.jsp</result>
            </action>
    </package>
    

    创建结果页面,type.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>My JSP 'type.jsp' starting page</title>
    
      </head>
      
      <body>
        request域值: ${requestScope.req }
      </body>
    </html>
    

    局部结果页面和全局结果页面

    比如:现在有两个action,这两个action都放回success,这两个success都是同一个结果页面 以前的做法,每个action都配置success页面
    **配置全局结果页面,在所有的action如果返回success,而且都到同一个页面
    在package里面使用标签<global-results>


    全局页面配置

    局部结果页面,在action里面使用result标签配置
    如果既配置了全局结果页面,又配合了局部结果页面,最终以局部结果页面为准


    配置例子

    Struts2封装数据的方式(获取表单数据)

    前提:创建User类set和get方法,生成toString方法

    package cn.itcast.bean;
    
    public class User {
    
        //属性私有的
        private String username;
        private String password;
        //私有的属性通过公开的方法
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        @Override
        public String toString() {
            return "User [username=" + username + ", password=" + password + "]";
        }
        
    }
    

    (1)传统方式获取表单数据

    Javabean:就是Java类,遵循一定的书写规范

    第一步 创建DateAction1

    package cn.itcast.bean;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    /**
     * 使用传统方式获取表单数据,封装到javabean中
     * @author asus
     *
     */
    public class DataAction1 extends ActionSupport {
    
        @Override
        public String execute() throws Exception {
            //使用servletactionContext获取
            HttpServletRequest request = ServletActionContext.getRequest();
            //获取表单数据
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            //封装到javabean中
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            System.out.println(user);
            return SUCCESS;
        }
    }
    

    第二步 配置action,struts.xml

    <!-- 使用传统方式封装 -->
    <action name="dataAction1" class="cn.itcast.bean.DataAction1">
        <result name="success">/index.jsp</result>
    </action>
    

    第三步 创建form1页面

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>My JSP 'form1.jsp' starting page</title>
    
      </head>
      
      <body>
        <form action="${pageContext.request.contextPath }/dateAction1.action" method="post">
            username:<input type="text" name="username"/>
            <br/>
            password:<input type="text" name="password"/>
            <br/>
            <input type="submit" value="提交"/>
        </form>
      </body>
    </html>
    

    (2)第一种:属性封装(在action中创建User类,不适合很多属性表单)

    第一步 创建FieldAction

    package cn.itcast.bean;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    /**
     * 使用属性封装数据
     * @author asus
     *
     */
    public class FieldAction extends ActionSupport {
    //第一步.在action里面声明变量
    //(变量名称和表单输入项的name属性值一样)
        private String username;
        private String password;
        //第二步.生成变量的set和get方法
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        
        @Override
        public String execute() throws Exception {
            System.out.println(username);
            System.out.println(password);
            return SUCCESS;
        }
    }
    

    第二步 配置action struts.xml

    <!-- 使用属性封装 -->
    <action name="fieldAction" class="cn.itcast.bean.FieldAction">
        <result name="success">/index.jsp</result>
    </action>
    

    第三步 创建Form1页面

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP 'form1.jsp' starting page</title>
      </head>
      
      <body>
        <form action="${pageContext.request.contextPath }/fieldAction.action" method="post">
            username:<input type="text" name="username"/>
            <br/>
            password:<input type="text" name="password"/>
            <br/>
            <input type="submit" value="提交"/>
        </form>
      </body>
    </html>
    

    (3)第二种:ognl表达式封装(直接把表单数据封装到Javabean里面)

    第一步 创建OgnlAction

    package cn.itcast.bean;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    /**
     * 使用ognl表达式封装数据
     * @author asus
     *
     */
    public class OgnlAction extends ActionSupport {
    
        //1.声明javabean
        private User user;
        //2.生成javabean的set和get方法
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }   
        @Override
        public String execute() throws Exception {
            System.out.println(user);
            return SUCCESS;
        }
    }
    

    第二步 配置action struts.xml

    <!-- 使用ognl表达式封装 -->
    <action name="ognlAction" class="cn.itcast.bean.OgnlAction">
        <result name="success">/index.jsp</result>
    </action>
    

    第三步 创建form2页面

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>My JSP 'form1.jsp' starting page</title>
    
      </head>
      
      <body>
    <form action="${pageContext.request.contextPath }/ognlAction.action" method="post">
         <!--3.重点是name值是user.属性值   
          user.属性名称  这里面的user,
          不是定义变量的属性名称,
          而是Javabean里面get方法后面单词首字母小写-->
            username:<input type="text" name="user.username"/>
            <br/>
            password:<input type="text" name="user.password"/>
            <br/>
            <input type="submit" value="提交"/>
        </form>
      </body>
    </html>
    

    第三种:模型驱动封装(用的最多)创建Javabean对象

    第一步 创建ModelAction 实现ModelDriven接口

    package cn.itcast.bean;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    /**
     * 使用模型驱动方式封装数据
     * @author asus
     *
     */
       //接口里面使用泛型,写要封装到哪个javabean的名称
    public class ModelAction extends ActionSupport implements ModelDriven<User>{
    
        //创建javabean对象
        private User user = new User(); 
        //实现接口的方法
        //getModel方法里面return的值,创建的javabean对象
        public User getModel() {
            return user;
        }   
        @Override
        public String execute() throws Exception {
            System.out.println(user);
            return SUCCESS;
        }
    }
    

    第二步 配置action struts.xml

    <!-- 使用模型驱动封装 -->
    <action name="modelAction" class="cn.itcast.bean.ModelAction">
        <result name="success">/index.jsp</result>
    </action>
    

    第三步 创建form3页面

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>My JSP 'form1.jsp' starting page</title>
    
      </head>
      
      <body>
    <form action="${pageContext.request.contextPath }/modelAction.action" method="post">
    <!--第三步 javabean的属性名称和表单输入项的name的属性值一样-->
            username:<input type="text" name="username"/>
            <br/>
            password:<input type="text" name="password"/>
            <br/>
            <input type="submit" value="提交"/>
        </form>
      </body>
    </html>
    

    底层:模型驱动使用Struts2里面默认执行的拦截器

    知识点:发送请求的时候,首先到过滤器里面,默认执行一系列拦截器,拦截器在struts-default.xml中配置

    比较OGNL封装和模型驱动封装

    共同点:都可以把数据封装到Javabean里面
    不同点:
    1、使用模型驱动只能向一个Javabean里面封装数据
    2、使用OGNL表达式形式可以向多个Javabean里面封装数据,声明不同的Javabean

    第一步:创建两个Javabean类

    User类

    package cn.itcast.bean;
    
    public class User {
    
        //属性私有的
        private String username;
        private String password;
        //私有的属性通过公开的方法
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        @Override
        public String toString() {
            return "User [username=" + username + ", password=" + password + "]";
        }
        
    }
    

    Person类

    package cn.itcast.bean;
    
    public class Person {
    
        private String address;
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    }
    

    第二步:创建OgnlAction类

    package cn.itcast.bean;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    /**
     * 使用ognl表达式封装多个数据
     * @author asus
     *
     */
    public class OgnlAction extends ActionSupport {
    
        //声明两个javabean
        private User user;
        private Person person;
        //生成javabean的set和get方法
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }
        public Person getPerson() {
            return person;
        }
        public void setPerson(Person person) {
            this.person = person;
        }
        
        @Override
        public String execute() throws Exception {
            System.out.println(user);
            System.out.println(person.getAddress());
            return SUCCESS;
        }
    }
    

    第三步:配置action,struts.xml

    <!-- 使用ognl表达式封装 -->
    <action name="ognlAction" class="cn.itcast.bean.OgnlAction">
        <result name="success">/index.jsp</result>
    </action>
    

    第四步:配置form页面

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>My JSP 'form1.jsp' starting page</title>
    
      </head>
      
      <body>
        <form action="${pageContext.request.contextPath }/ognlAction.action" method="post">
            username:<input type="text" name="user.username"/>
            <br/>
            password:<input type="text" name="user.password"/>
            <br/>
            address:<input type="text" name="person.address"/>
            <br/>
            <input type="submit" value="提交"/>
        </form>
      </body>
    </html>
    

    Struts2封装复杂数据(会用)

    (1)封装数据到List集合

    第一步 声明list集合

    第二步 生成list集合的get和set方法

    //声明list集合
    private List<User> list;
    public List<User> getList(){
          return list;
    }
    public void setList(List<User> list) {
          this.list = list;
    }
    

    第三步 在表单页面中使用ognl表达式

    username:<input type="text" name="list[0].username/>
    <br/>
    password:<input type="text" name="list[0].password/>
    <br/>
    username:<input type="text" name="list[1].username/>
    <br/>
    password:<input type="text" name="list[1].password/>
    <br/>
    

    list[0].username
    list:action里面的get方法后面首字母小写
    list[0]:list集合里面第一个User对象
    list[0].username:list集合里面第一个User对象中username属性值

    封装数据到Map集合

    第一步 声明Map集合

    第二步 生成Map的set和get方法

    //声明Map集合
    private Map<String, User> map;
    //生成get和set方法
    public void setMap(Map<String, User> map){
          this.map = map;
    }
    public Map<String, User> getMap(){
          return map;
    }
    

    第三步 在表单页面写ognl表达式

    username:<input type="text" name="map['abc'].username/>
    <br/>
    password:<input type="text" name="map['abc'].password/>
    <br/>
    username:<input type="text" name="map['one'].username/>
    <br/>
    password:<input type="text" name="map['one'].password/>
    <br/>
    

    map['one'].username
    map:action里面get方法后面首字母小写
    map['one']:设置map的key是one,根据key获取value值user对象
    map['one'].username:设置获取user对象里面的属性值

    Struts2符合MVC思想

    mvc:模型Javabean、视图jsp、控制Servlet


    MVC模型

    Struts2的类型转换(了解)

    在jsp页面中的数据,没有类型的概念,都可以显示到页面中,理解为字符串。
    在action里面,变量有类型的概念,比如int、Date、String...

    演示效果:
    1.创建表单,输入姓名、年龄、生日
    2.提交表单到action,在action中获取提交的数据

    username:<input type="text" name="username"/>
    <br/>
    age:<input type="text" name="age"/>
    <br/>
    birthday:<input type="text" name="birthday"/>
    

    页面中没有类型的概念,到action中把不同数据转换成对应的类型
    封装数据

    private String username;
    private int age;
    private Date birthday;
    

    错误的效果
    要求的age的类型是int类型,在页面输入的是abcd,不是int类型,在转换的过程中出现错误,自动返回使用名称为input

    <action name="converterdemo1" class="cn.xxx.Converter">
            <result name="success">/index.jsp</result>
            <result name="input">/error.jsp</result>
    </action>
    

    Date可以接收yyyy-MM-dd格式字符串

    自定义类型转换器

    实现步骤
    把Date默认的格式yyyy-MM-dd,转换成yyyy/MM/dd

    第一步:创建类,继承装换器类DefaultTypeConverter

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
    if(toType == Date.class) {
          String[] value_array = (String[])value;
          String s_value = value_array[0];
          try{
                Date date = sdf.parse(s_value);
                retrun date;
          } catch (ParseException e) {
                e.printStackTrace();
          }
    } else {
          Date d = (Date) value;
          String times = sdf.format(d);
          return times;
    }
    

    第二步:配置类型转换器(注册类型转换器)

    1、如果使用属性封装,在action所在的包里面,创建文件Action类名-conversion.properties

    要转换的属性的名称=类型转换器类的全路径

    birthday=cn.itcast.conerter.Myconverter
    

    2、如果使用模型驱动封装,在Action类所在包创建javabean名-conversion.properties;

    属性名称=类型转换器的全类名

    birthday=cn.itcast.conerter.Myconverter
    

    Struts2的数据校验

    引入介绍

    比如注册用户,在注册页面中输入信息,比如用户名,密码,年龄等等,
    用户名不能为空,密码可能要求长度至少6位
    这些操作称为数据的校验(表单校验)
    之前进行数据的校验,在页面中使用js实现校验
    如果在项目中单纯使用js校验,会有问题:
    如果知道servlet的路径,不需要页面也可以把数据提交过去
    http://127.0.0.1/web/servlet1?username=11&password=123
    一般在实际开发中,双层校验,在页面中使用js校验,在servlet判断数据的格式
    Struts2里面数据校验有两种方式:

    第一种 手动写代码方式(手工代码校验请求参数)

    实现过程:
    重写actionsupport里面的validate方法,这个方法在execute方法之前执行,把校验逻辑写在这个歌validate方法里面

    public void validate(){
          if(username == null || username.length() == 0) {
                this.addFiedError(username, "用户名不能为空");
          }
    }
    

    如果校验条件通过,返回视图名称input

    <result name="input">/validate/demo1.jsp</result>
    

    在页面获取action里面通过addfielderror设置值
    使用struts2标签

    <s:fielderror>
    

    上面的操作是对action里面的所有方法进行校验
    但是如果只是想要对某个方法进行校验
    命名方式:validate要执行的方法名称首字母大写()

    public void validateAdd() {
          if(username == null || username.length() == 0) {
                this.addFiedError(username, "用户名不能为空");
          }
     }
    
    public String add() {
          return "add";
    }
    

    第二种 xml配置文件方式校验(重点)

    第一个 对action里面所有方法进行校验

    步骤一:编写页面demo3.jsp表单
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <!--引入struts2标签-->
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'demo1.jsp' starting page</title>
    
    </head>
    
    <body>
        <font color="red"><s:fielderror />
        </font>
        <form action="${pageContext.request.contextPath }/validatedemo3.action"
            method="post">
            username: <input type="text" name="username" /> <br /> 
        <input type="submit" />
        </form>
    </body>
    </html>
    

    步骤二:编写Action继承ActionSupport或者实现Validateable接口(Validatedemo3.java继承ActionSupport 使用xml校验必须提供get方法)

    package cn.itcast.validation;
    
    import com.opensymphony.xwork2.ActionSupport;
    /**
     * xml配置方式校验
     */
    public class ValidateDemo3 extends ActionSupport {
    
        private String username;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String execute() {
            return "success";
        }   
    }
    

    步骤三:在struts.xml中配置

    <action name="validatedemo3" class="cn.itcast.validation.ValidateDemo3">
            <result name="success">/index.jsp</result>
            <result name="input">/validate/demo3.jsp</result>
    </action>
    

    步骤四:编写校验规则xml文件

    在Action所在包编写Action类名-validate.xml对Action所有业务方法进行校验

    <?xml version="1.0" encoding="UTF-8"?>
    <!--引入DTD约束-->
    <!DOCTYPE validators PUBLIC
      "-//Apache Struts//XWork Validator 1.0.3//EN"
      "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
    <!--name名是Action中属性的名字  type是校验规则  <message>里面是提示信息-->
    <validators>
        <field name="username">
            <field-validator type="requiredstring">
                <message>用户名不能为空xml</message>
            </field-validator>
        </field>
    </validators>
    

    default.xml内建校验器中常用的校验规则所在文件及解释


    defalut.xml
    • required(必填校验器,要求被校验的属性值不能为null)
    • requiredstring(必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)
    • stringlength(字符串长度校验器,要求被校验的属性值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)
    • regex(正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)
    • int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)
    • double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)
    • fieldexpression (字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)
    • email(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址)
    • url(网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址)
    • date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)
      案例:
      required 必填校验器
    <field-validator type="required">
           <message>性别不能为空!</message>
    </field-validator>
    

    requiredstring 必填字符串校验器

    <field-validator type="requiredstring">
           <param name="trim">true</param>
           <message>用户名不能为空!</message>
    </field-validator>
    

    stringlength:字符串长度校验器

    <field-validator type="stringlength">
        <param name="maxLength">10</param>
        <param name="minLength">2</param>
        <param name="trim">true</param>
        <message><![CDATA[产品名称应在2-10个字符之间]]></message>
    </field-validator>
    

    int:整数校验器

    <field-validator type="int">
        <param name="min">1</param>
        <param name="max">150</param>
        <message>年龄必须在1-150之间</message>
    </field-validator>
    

    date: 日期校验器

    <field-validator type="date">
        <param name="min">1900-01-01</param>
        <param name="max">2050-02-21</param>
        <message>生日必须在${min}到${max}之间</message>
    </field-validator>
    

    url: 网络路径校验器

    <field-validator type="url">
        <message>传智播客的主页地址必须是一个有效网址</message>
    </field-validator>
    

    email:邮件地址校验器

    <field-validator type="email">
        <message>电子邮件地址无效</message>
    </field-validator>
    

    regex:正则表达式校验器

    <field-validator type="regex">
         <param name="expression"><![CDATA[^13\d{9}$]]></param>
         <message>手机号格式不正确!</message>
    </field-validator>
    

    fieldexpression : 字段表达式校验

    <field-validator type="fieldexpression">
           <param name="expression"><![CDATA[(password==repassword)]]></param>
           <message>两次密码输入不一致</message>
    </field-validator>
    

    第二个 对action指定的方法校验(update方法)

    步骤一:编写demo4.jsp表单

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <!--引入struts2标签-->
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'demo1.jsp' starting page</title>
    
    </head>
    
    <body>
        <font color="red"><s:fielderror />
        </font>
        <form action="${pageContext.request.contextPath }/validatedemo4.action"
            method="post">
            username: <input type="text" name="username" /> <br /> <input
                type="submit" />
        </form>
    </body>
    </html>
    

    步骤二:编写Action继承ActionSupport或者实现 Validateable 接口 (ValidateDemo4.java继承ActionSupport *使用xml校验 必须提供get方法)

    package cn.itcast.validation;
    
    import com.opensymphony.xwork2.ActionSupport;
    /**
     * xml配置方式校验
     */
    public class ValidateDemo4 extends ActionSupport {
    
        private String username;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        
        public String update() {
            return "success";
        }   
    }
    

    步骤三:在struts.xml中配置

    <action name="validatedemo4" class="cn.itcast.validation.ValidateDemo4" method="update">
            <result name="success">/index.jsp</result>
            <result name="input">/validate/demo4.jsp</result>
    </action>
    

    步骤四:编写校验规则xml文件

    在action所在包里面创建xml文件,命名: Action类名-ActionName(<action>元素name属性)-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="username">
            <field-validator type="requiredstring">
                <message>用户名不能为空updatexml</message>
            </field-validator>
        </field>
    </validators>
    

    相关文章

      网友评论

        本文标题:Struts2--day02

        本文链接:https://www.haomeiwen.com/subject/pggmbttx.html