zoukankan      html  css  js  c++  java
  • Struts2 拦截器(interceptor) 与 模型驱动3中传值方式

    1:拦截器 (理解为 符合拦截的要求 就可以 继续访问执行对应的Action 不符合我的要求就会做出对应的处理。)

      拦截器和Action完全松耦合。

      Struts2的默认使用拦截器有18个

    实现步骤:

      1 编写一个普通的java类 实现 Intercepter接口

    public class lJqAction implements Interceptor {
        @Override
        public void destroy() {
        }
        @Override
        public void init() {
        }
        @Override
        public String intercept(ActionInvocation invocation) throws Exception {
            String username = ServletActionContext.getRequest().getParameter("username");
    
            if(username.equalsIgnoreCase("admin")){
                return invocation.invoke();  //如果正确就会直接通过 invocation.invoke继续执行需要访问的Action类
            }else {
                ActionContext.getContext().getValueStack().push("不好意思你输入的有错误"); //错误就会直接通过返回的值 对应配置的结果集跳入对应的页面
                return "error";
            }
        }
    }


    action类
    public class OGNLDemo extends ActionSupport {
    
        public String testOgnl(){
            ActionContext.getContext().getValueStack().push("正确访问");
            return "success";
        }
    }
    
    
    
     

        2在struts.xml文件配置自定义拦截器栈

    片段代码
    <interceptors> <interceptor name="privilege1" class="com.ognl.lJqAction"></interceptor> <interceptor-stack name="p"> <interceptor-ref name="privilege1"></interceptor-ref><!--自定义的--> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="p"></default-interceptor-ref>


    完整代码
          <package>
         <interceptors> <interceptor name="privilege1" class="com.ognl.lJqAction"></interceptor> <interceptor-stack name="p"> <interceptor-ref name="privilege1"></interceptor-ref><!--自定义的--> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="p"></default-interceptor-ref> <action name="ognlTest" class="com.ognl.OGNLDemo" method="testOgnl"> <result name="error" >/index.jsp</result> <result name="success" >/success.jsp</result> </action> </package>
    
    
    
     

    模型驱动

    一.属性驱动


    Jsp代码

    <body>

           <h1>属性驱动</h1>

           <form action="${pageContext.request.contextPath}/Demo1Action" method="post">

                  用户名:<input type="text" name="name"  ><br>

                  年龄:<input type="text" name="age"  ><br>

                  入职日期:<input type="text" name="hireDate"  ><br>

                  <input type="submit" value="提交"  ><br>

           </form>

    </body>

    Action代码

    //使用Action获得表单提交参数

    //1.在Action中准备与参数键相同的属性,并提供相应的set方法,参数值会自动封装到属性中.

    //2.封装参数还会帮我们自动类型转换. (8大基本数据类型|指定格式的Date类型)

    public class Demo7Action extends ActionSupport {

           private static final long serialVersionUID = 1L;

           private String name;

           private Integer age;

           private Date hireDate;

           @Override

           public String execute() throws Exception {

                  System.out.println("name:"+name+",age:"+age+",hireDate:"+hireDate);    

                  return SUCCESS;

           }

           public void setName(String name) {

                  this.name = name;

           }

           public void setAge(Integer age) {

                  this.age = age;

           }

           public void setHireDate(Date hireDate) {

                  this.hireDate = hireDate;

           }

    }

    二.对象驱动

    Jsp代码

    <body>

           <h1>对象驱动</h1>

           <form action="${pageContext.request.contextPath}/Demo8Action" method="post">

                  用户名:<input type="text" name="user.name"  ><br>

                  年龄:<input type="text" name="user.age"  ><br>

                  入职日期:<input type="text" name="user.hireDate"  ><br>

                  <input type="submit" value="提交"  ><br>

           </form>

    </body>

    Action代码

    //使用Action获得表单提交参数

    //1 在action中准备对象属性.并提供对象的set/get方法

    //2 表单提交的键格式:对象属性名.属性名

    public class Demo8Action extends ActionSupport {

           private static final long serialVersionUID = 1L;

           private User user;

           @Override

           public String execute() throws Exception {

                  System.out.println(user);   

                  return SUCCESS;

           }

           public void setUser(User user) {

                  this.user = user;

           }

    public User getUser() {

                  return user;

           }  

    }

    三.模型驱动

    Jsp代码

    <body>

           <h1>模型驱动</h1>

           <form action="${pageContext.request.contextPath}/Demo9Action" method="post">

                  用户名:<input type="text" name="name"  ><br>

                  年龄:<input type="text" name="age"  ><br>

                  入职日期:<input type="text" name="hireDate"  ><br>

                  <input type="submit" value="提交"  ><br>

           </form>

    </body>

    Action代码

    //使用Action获得表单提交参数

    //1 action实现ModelDriven接口.在实现方法中返回封装参数的User对象

    //2 表单提交参数时,直接写对象中属性名即可.

    public class Demo9Action extends ActionSupport implements ModelDriven<User> {

           private static final long serialVersionUID = 1L;

           private User user = new User();

          

           public User getModel() {

                  return user;

           }

           @Override

           public String execute() throws Exception {

                 

                  System.out.println(user);

                 

                  return SUCCESS;

           }

    }

    坚持
  • 相关阅读:
    STM32 ~ 查看系统时钟
    Allegro从.brd文件中导出器件封装
    Cadence原理图与Allegro交互
    Cadence关闭StartPage的方法
    emWin 移植
    python闭包
    python多线程之threading
    3.1决策树算法应用
    3.1决策树算法
    MyEclipse10 配置python的pyDev
  • 原文地址:https://www.cnblogs.com/gaoSJ/p/12986264.html
Copyright © 2011-2022 走看看