学习笔记-----Struts2的模型驱动和属性驱动

本文介绍Struts2框架中两种获取表单元素内容的方法:属性驱动与模型驱动。属性驱动通过设置Action属性与表单name一致实现,模型驱动则需实现ModelDriven接口。
在struts2中,如何获取表单元素的内容:
 
   1、属性驱动
       1、action中属性的名称和页面上name的名称保持一致
       2、属性必须有set和get方法。


       属性驱动原理:

        1.当请求一个页面时:例:http://localhost:8080/itheima03_struts2/login.jsp
        2.login.jsp
             用户名:<input type="text" name="username">
             密码:<input type="password" name="password">


        3.会经过一个struts2的默认的拦截器:
            ParametersInterceptor:
               1、把页面上表单的元素获取,封装成了一个TreeMap
               2、遍历TreeMap
                   for(Entry<String,Object[]> entry:treeMap){
                     valueStack.setValue(entry.getKey(),entry.getValue()[0]);
                   }

            说明:
              1、在执行该拦截器的时候,action已经在栈顶了,那么action的属性在对象栈中
              2、通过valueStack.setValue的方法可以改变对象栈的属性的值。

        4.
            LoginAction{
                       private String username;
                       private String password;
                       //set和get方法
                       public String login(){
                           在执行该方法的时候,username和password已经有值了
                       }
                    }
   
 
   2、模型驱动
       1、一个action必须实现一个接口ModelDriver<获取数据的bean>
       
       2、该action中必须有一个方法getModel()
        
       3、在action中创建一个对象,用于getModel方法的返回值

       4、bean中的属性和页面上name属性的值对应。


   属性驱动拦截器的部分源码:
    ModelDriverInterceptor{
        interceptor(){
        Object action = invocation.getAction();

        if (action instanceof ModelDriven) {//该类必须实现ModelDriven
            ModelDriven modelDriven = (ModelDriven) action;
            ValueStack stack = invocation.getStack();
            Object model = modelDriven.getModel();
            stack.push(model);//把模型驱动的对象放入到栈顶

            该对象位于对象栈栈顶的时候,其内部属性会暴漏出来,
            所以可以在页面中直接用标签指定的name取出该对象的属性值(属性驱动)
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值