zoukankan      html  css  js  c++  java
  • Struts学习之模型驱动

    * 要从页面中获取表单元素的值,需要在动作类中声明与页面元素同名的属性。导致动作类中既有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=表单重复提交,请刷新后重试!

  • 相关阅读:
    在Ubuntu11.10中安装OpenCV2.3.1的详细步骤
    基于二元语法模型的中文分词
    相似图片搜索的原理
    基于GPU的KMeans聚类算法
    Windows下Eclipse和PyDev搭建完美Python开发环境
    Ubuntu 11.10+win7双系统启动项管理及配置方法
    主题爬虫
    vue定义全局过滤器
    element elimage 放多张图片,显示大图
    element UI的form 禁止浏览器自动填充用户名或密码
  • 原文地址:https://www.cnblogs.com/sunfie/p/4704434.html
Copyright © 2011-2022 走看看