`
lgx2351
  • 浏览: 171622 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

在控制器组件与模型组件之间传送数据

阅读更多

MVC框架中,控制器组件与模型组件需要相互传送数据,我们可以写个javaBean来保存。

ParamBean这个javaBean本质上是把数据放在hashtable中,并提供了存放和取出数据等方法。

代码如下:

public class ParamBean implements Serializable {
    // 操作员用户代码(用于日志显示)
    private String opr_code = "";

    // 用户部门代码(用于日志显示)
    private String dep_code = "";

    // 当前操作的菜单(用于日志显示)
    private String menu_code = "";

    // 当前操作的说明(用于日志显示)
    private String op_desc = "";

    // 返回代码(0表示成功)
    private int ret_code;

    // 错误信息
    private String err_msg = "";

    private Hashtable ht;

    private CachedRowSet crs;

    /**
     * 构造函数
     */
    public ParamBean() {
        opr_code = "";
        err_msg = "";
        ret_code = 0;
        ht = new Hashtable();
        crs = null;
    }

    /**
     * 设置信息
     */
    public void set_info(String opr_code, String dep_code, String menu_code,
            String op_desc) {
        this.opr_code = opr_code;
        this.dep_code = dep_code;
        this.menu_code = menu_code;
        this.op_desc = op_desc;
    }

    /**
     * 添加参数到哈希表
     */
    public void add_param(String param_name, Object param_value) {
        if (param_name == null || param_value == null)
            return;
        param_name.trim();
        if (param_name.equalsIgnoreCase(""))
            return;

        this.ht.put(param_name, param_value);
    }

    /**
     * 从参数哈希表中获取参数
     */
    public Object get_param(String param_name) {
        if (param_name != null) {
            param_name.trim();
            if (!param_name.equalsIgnoreCase("")) {
                return ht.get(param_name);
            }
        }
        return null;
    }

    /**
     * 从参数哈希表中删除参数
     */
    public void remove_param(String param_name) {
        if (param_name != null) {
            param_name.trim();
            if (!param_name.equalsIgnoreCase("")) {
                ht.remove(param_name);
            }
        }
    }

    /**
     * 取哈希表中的参数个数
     */
    public int get_param_count() {
        return this.ht.size();
    }

    /**
     * 清空参数(参数无须传回客户端)
     */
    public void clear_param() {
        this.ht.clear();
    }

    /**
     * 设置CRS
     */
    public boolean set_crs(ResultSet rs) {
        boolean ok = false;
        try {
            crs = new CachedRowSetImpl();
            crs.populate(rs);
            ok = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ok;
    }

    /**
     * 设置错误信息,同时置ret_code为-1
     */
    public void setErr_msg(String err_msg) {
        this.ret_code = -1;
        this.err_msg = err_msg;
    }

    /**
     * 设置成功信息
     */
    public void setSuccess() {
        this.ret_code = 0;
        this.err_msg = "";
    }

    /**
     * 判断操作是否成功
     */
    public boolean success() {
        return this.ret_code == 0;
    }

    public String getDep_code() {
        return dep_code;
    }

    public void setDep_code(String dep_code) {
        this.dep_code = dep_code;
    }

    public CachedRowSet getCrs() {
        return crs;
    }

    public void setCrs(CachedRowSet crs) {
        this.crs = crs;
    }

    public Hashtable getHt() {
        return ht;
    }

    public void setHt(Hashtable ht) {
        this.ht = ht;
    }

    public String getMenu_code() {
        return menu_code;
    }

    public void setMenu_code(String menu_code) {
        this.menu_code = menu_code;
    }

    public String getOp_desc() {
        return op_desc;
    }

    public void setOp_desc(String op_desc) {
        this.op_desc = op_desc;
    }

    public String getOpr_code() {
        return opr_code;
    }

    public void setOpr_code(String opr_code) {
        this.opr_code = opr_code;
    }

    public int getRet_code() {
        return ret_code;
    }

    public void setRet_code(int ret_code) {
        this.ret_code = ret_code;
    }

    public String getErr_msg() {
        return err_msg;
    }
}

 

以上代码都很好理解,主要是add_param(),set_crs()方法主要是把数据库执行查询后得到的ResultSet通过CachedRowSetImpl的populate方法放进CachedRowSetImpl里,至于为什么要放到CachedRowSetImpl里处理,参看些jdbc编程方面的知识。(TO-DO)
写好这个javaBean后,在控制器组件里可以把在前台传进来的值通过add_param()方法放进来,如下:

param_bean param = new param_bean();
        String dep_code = (String)request.getSession().getAttribute("LOGIN_USER_DEP");
        param.add_param("DEP_CODE", dep_code);

 在模型组件里可以根据传进来的这个param来取到值,进行一些数据库的操作,如下:

    public param_bean loginAuth(param_bean param) throws java.lang.Exception{
        String user_code = (String)param.get_param("USER_CODE"); 
        param.clear_param();
        String sql = "..";
        sqlExecQuery(param,sql);
        return param;
    }    
    /**
     * 执行查询语句的公共方法
     * @param param
     * @param sql
     */
    private void sqlExecQuery(param_bean param,String sql) throws Exception{
        database_bean db = get_database();
        param.ret_code = -1;
        try{
            param.set_crs(db.execute_query(sql));
            param.ret_code = 0;
            param.err_msg = "";
            db.close();
        }catch(Exception ex){
            param.ret_code = -1;
            param.err_msg = ex.getMessage();
            ex.printStackTrace();
        }
    }

 

完成相应的数据库操作后,在控制器里进行如下判断,并对数据库的查询结果放到request进行更加复杂的处理,如下:

            if (param.ret_code == 0) {
                request.setAttribute("PARAM_CRS", param.crs);
            } else {
                System.out.print(param.err_msg);
                throw new Exception(param.err_msg);
            }

 

到这里,MVC三层结构中在在控制器组件与模型组件之间传送数据大致介绍完成了:)

分享到:
评论

相关推荐

    基于模型加固的离网微网终身控制学习

    基于规则的策略和具有前瞻性的模型预测控制器。结果表明 经过培训的代理能够在系统的终身设置中超越这两个基准 动态是随着时间而变化的。 1. 介绍 微电网是由灵活消费、分布式发电(可再生能源)组成的小型电力网络 和...

    C#微软培训资料

    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...

    基于Android Studio开发的手机便签APP,手机笔记APP源代码+详细项目文档

    本便签应用采用 MVC(Model-View-Controller)架构,将应用的业务逻辑、用户界面和数据...Controller - 控制器层:负责管理用户与应用之间的交互,接收用户的输入并处理对应的业务逻辑,包括点击事件处理、数据传输等。

    struts2.4+spring3.1+hibernate4.1的SSH框架

     采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可...

    tuxedo培训教程.doc

    使系统的安装与升级更容易 在BEA TUXEDO 的三层结构组件软件模型下开发的应用程序以服务器组件和客户组件 为安装、升级的单位,当一个组件需要更新时,管理人员甚至能够在运行系统不停机的 情况下完成系统的升级,这...

    tuxedo培训教程(1).doc

    使系统的安装与升级更容易 在BEA TUXEDO 的三层结构组件软件模型下开发的应用程序以服务器组件和客户组件 为安装、升级的单位,当一个组件需要更新时,管理人员甚至能够在运行系统不停机的 情况下完成系统的升级,这...

    Visual C++实践与提高-COM和COM+篇『PDF』

    4.5.1 数据交换与传输协议的分离 4.5.2 数据格式和传输介质 4.5.2.1 FORMATETC结构 4.5.2.2 STGMEDIUM结构 4.5.3 数据对象和IDataObject接口 4.5.4 MFC对统一数据传输的支持 4.5.4.1 COleDataSource类 4.5.4.2 ...

    基于IA技术双控制器网络化控制系统可靠性 (2006年)

    考虑到系统中计算机控制器的重要作用和状态,建立了系统的可靠性模型,利用Markov过程理论证明了与通常网络化控制系统相比,基于智能代理技术有双控制器的计算机网络化控制系统具有更高的可靠性和安全性。

    andromeda:Andromeda是我的个人MVC样板,我在常规工作流程中使用它来创建使用Express.JS,Webpack作为编译器和Dev Server和EJS作为模板引擎构建的网站和Web应用程序以呈现视图

    它表示在控制器组件或任何其他相关业务逻辑之间传输的数据; 建于 后端: 用于创建处理路由和处理来自客户端的请求。 -节点JS司机为MySQL。 前端 很棒CSS预处理器。 使用JavaScript转换CSS的工具。 模板引擎...

    大数据开源框架集锦.pdf

    sqoop 数据迁移⼯具,⽤来在不同数据存储软件之间进⾏数据传输的开源软件 DataX 阿⾥巴巴开源的离线数据同步⼯具,⽤于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间...

    数据可视化智能软件主要性能指标.doc

    数据可视化智能软件主要性能指标 1) 分布式实时数据库 A 软件应采用多线程的处理机制,分布式组件的设计支持负载均衡体系。 B 内置动态优化功能,可保证用户在访问一个窗口、鼠标动作等所产生的数据交互的快速 响应...

    D5开发人员指南-05卷

    23.6.6 创建自动化控制器 740 23.7 高级自动化技术 745 23.7.1 自动化事件 745 23.7.2 自动化集合 754 23.7.3 类型库中新的接口类型 760 23.7.4 交换二进制数据 761 23.7.5 COM的语言支持 763 23.8 MTS 766 23.8.1 ...

    JSP程序设计课件包含Hibernate,Struts的介绍

    JSP程序设计教程 第1章 JSP概述 第2章 JSP开发基础 第3章 JSP语法 第4章 JSP内置对象 第5章 JavaBean技术 ...视图组件,控制器,业务逻辑组件之间没有代码的联系。 16. Struts的MVC与标准MVC的不同点

    Java及大数据学习路线.pdf

    Java及⼤数据学习路线 1.Java学习路线 1.1JavaSE Java基础 Java8新特性 数据库MySQL与SQL语⾔ JDBC 1.2JavaWeb HTML基础与CSS JavaScript DOM 与 jQuery XML与Tomcat HTTP协议 服务器端组件Servlet JSP EL表达式 ...

    基于Java的视频会议系统(软件程序+WORD论文文档).zip

    JMF的主要应用功能之一是多媒体数据流在网络中的实时传输,其RTP包中提供的RTP包中提供的RTPManager(RTP管理器)、TrackContol(轨道控制器)、SendStream(发送数据流)、ReceiveStream(接收数据流)、...

    Delphi5开发人员指南

    5.9 消息与事件之间的关系 128 5.10 总结 129 第6章 代码标准文档 130 6.1 一般的源代码格式规则 130 6.1.1 缩进 130 6.1.2 边距 130 6.1.3 begin...end 130 6.2 Object Pascal 131 6.2.1 括号 131 6.2.2 保留字和...

    windowsnt 技术内幕

    Group) 理解删除一个组的影响 域控制器(Domain Controller)简介 成员服务器(Member Server) 备份域控制器(Backup Domain Controller)的升级 将一个主域控制器降级为备份域控制器 把成员服务器升级为域控制器 域控制...

    网络管理员试题(八)

    601.在OSI参考模型中,各功能层之间的统一接口称为边界层。边界层使得网络模型能与上下层交流和共享相关 的信息,这些头信息包含有供接收栈的对等层阅读和处理的控制信息。 A.正确 B.错误 正确答案B 602.下面哪种...

    Visual Basic 6编程技术大全 中译本扫描版带书签 2/2

    16.2.3在应用程序之间传送数据576 16.2.4错误处理581 16.2.5用户接口组件584 16.2.6兼容性问题587 16.2.7注册组件591 16.2.8关闭服务器592 16.2.9 Persistence593 16.3创建ActiveX DLL服务器597 16.3.1 VBIDE中的...

Global site tag (gtag.js) - Google Analytics