* 要从页面中获取表单元素的值,需要在动作类中声明与页面元素同名的属性。导致动作类中既有javabean又有业务方法。
    * 将javabean和业务方法进行分离:
        * 将重新创建一个javabean,将javabean的内容放置其中。
        * 动作类action中只留业务方法
    * 在动作类中声明的javabean无法从页面中获取同名的属性
    * 需要使用struts2框架提供"ModelDriven(模型驱动)"
        * 实现ModelDriven这个接口
        * 重写getModel()方法,返回该javabean的实例
        * 代码如下:
            public class UserAction extends ActionSupport implements ModelDriven<User> {
                private User user = new User();
                public User getModel() {
                    return user;
                }
                public String add(){
                    System.out.println("UserAction ************* add()");
                    return "add";
                }
                public String save(){
                    System.out.println("UserAction ************* save()");
                    return "success";
                }
            }
        * 模型驱动的原理:
            * 在不使用模型驱动的时候,之所以在动作类中获取不到对应的属性的原因:
                * 在ValueStack中没有对应javabean的所有属性
            * 模型驱动的作用,就是将javabean的实例压入对象栈的栈顶,从而可以获取到对应的属性的值
页面回显技术:
    * 通过模型驱动,在动作类action中,可以获取到页面中元素的值
    //方法一
    * 通过javabean实例的set()方法,将新的内容set到javabean中,从而放置在页面对应元素中
        user.setUsername(newUser.getUsername());
        user.setTel(newUser.getTel());
        user.setDes(newUser.getDes());
    //方法二
    * 首先将值栈中,旧的javabean的内容,删除掉
    * 然后将新的内容压入到值栈中的栈顶
        ValueStack valueStack = ServletActionContext.getContext().getValueStack();
        valueStack.pop();
        valueStack.push(newUser);
处理表单重复提交:
    * 在页面中增加一个隐藏域:<s:token></s:token>
    * 创建一个struts.xml的配置文件,具体配置如下:
        <!-- 配置默认执行的拦截器栈,增加令牌拦截器 -->
        <interceptors>
            <interceptor-stack name="tokenStack">
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="token" >
                    <!-- 配置令牌拦截器,拦截的方法名,如果配置多个方法时,用","隔开 -->
                    <param name="includeMethods">save,update</param>
                </interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="tokenStack" />
    * 在struts.xml配置文件中,增加一个result结果类型:
        <!-- 配置表单重复提交后,要转向到的页面 -->
        <result name="invalid.token">/model/error.jsp</result>
    * 在表单重复提交后,要转向到的页面中通过<s:actionerror>获取struts2框架底层提供错误提示信息
    * 将struts2框架底层提供错误提示信息改成中文:
        * 在与动作类action同级目录下,创建名为"token.properties"的资源文件,文件内容如下:
            struts.messages.invalid.token=表单重复提交,请刷新后重试!

Struts学习之模型驱动的更多相关文章

  1. struts 学习

    1.在Struts2的Action中取得请求参数值的几种方法 public class GetRequestParameterAction extends ActionSupport { privat ...

  2. struts学习总结

    -- struts2 是在struts1和webwork基础上发展的全新框架. -- struts2解决的问题: 原始的servlet中,每需要操作一个crud的操作就要创建一个servlet,虽然后 ...

  3. Struts学习总结 学习

    ContextMap 包含值栈包含 root(list结构)和context(map结构)  值栈包含contextMap的引用.  Actioncontext是工具类 可以获取他们 Struts2拥 ...

  4. mzy,struts学习(一)

    大家都在讲struts已经过时了,现在都是前后台分离,没有必要去学一个淘汰的框架,但是怎么讲呢?我觉得,struts能够流行那么多年,肯定有它的原因,肯定有很多优秀和好的地方,有一个指导过我的人给我讲 ...

  5. struts学习

    1.集成tomcat到eclipse http://www.eclipsetotale.com/tomcatPlugin.html 下载最新的plug后,解压.解压后的文件放到eclipse的plug ...

  6. Struts学习总结-04 上传文件

    1. upload.jsp <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  7. Struts学习总结-02 类型转换

    一 类型转换 input.jsp <%@ page language="java" import="java.util.*" pageEncoding=& ...

  8. struts 学习之问一

    今天在进行struts全局类型和局部类型转换时,发现一个问题,如下: 当输入一个点的坐标时,我使用全局转换提示错误,找不到类,当改变成局部类型转换时,可以成功转换,不知道这个是什么原因,难道全局不可以 ...

  9. Struts学习之流程汇总

    struts2 架构图如下图所示: 依照上图,我们可以看出一个请求在struts的处理大概有如下步骤: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求: 2.这个请求经过一系列的 ...

随机推荐

  1. 取得正在运行的Activity

    在main.xml中: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...

  2. java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB**

    原文出处:http://cmsblogs.com/?p=1412 在上篇博文(java中文乱码解决之道(一)—–认识字符集)中,LZ简单介绍了主流的字符编码,对各种编码都是点到为止,以下LZ将详细阐述 ...

  3. linux 搭建Tomcat

    这几天用虚拟机装了centos ,以前没有用过linux,先将搭建java web 环境记录如下: 一.卸载系统安装的jdk环境. 1.安装好的CentOS会自带OpenJdk,用命令 java -v ...

  4. sql中int字段实现百分比

    首先: 用col*1.00 把int字段隐式转换成decimal类型. 然后: 用 round(col,2)来截取前两个小数前的数据 最后: 用 CONVERT(FLOAT,decimalNum)来转 ...

  5. 相比于python2.6,python3.0的新特性。

    这篇文章主要介绍了相比于python2.6,python3.0的新特性.更详细的介绍请参见python3.0的文档. Common Stumbling Blocks 本段简单的列出容易使人出错的变动. ...

  6. 加密传输SSL协议6_验证公钥

    如上图所示,我怎么能确定我手里的公钥就是我心中的接收方的公钥呢?怎么防止被钓鱼呢? 解决的办法就是引入一个第三方,一个权威机构,一个我们都相信的机构. 验证公钥,Digital Certificate ...

  7. nginx代理配置

    server {     listen       80;     server_name  api.colortrip.cn;     client_max_body_size 10m;     a ...

  8. js 报错 :object is not a function

    object is not a function 我遇到的具体问题是:js命名方法重复了,找到了别的地方,改个方法名就可以了 var h2_price = document.getElementByI ...

  9. hdu 4676 Sum Of Gcd 莫队+数论

    题目链接 给n个数, m个询问, 每个询问给出[l, r], 问你对于任意i, j.gcd(a[i], a[j]) L <= i < j <= R的和. 假设两个数的公约数有b1, ...

  10. JavaScript和php常用语法——切割字符串

    在面向Web的应用中,前台和后台通信非常常用的一种格式就是字符串,所以,在通信中,我们不可避免的就需要进行字符串的拼切. 在js代码中,当我们传递一个字符串到后台代码时,我们在后台需要对字符串进行切割 ...