`
lgx2351
  • 浏览: 175945 次
  • 性别: 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三层结构中在在控制器组件与模型组件之间传送数据大致介绍完成了:)

分享到:
评论

相关推荐

    data-transfer-project,数据传输项目使得人们可以很容易地在在线服务提供商之间传输数据。我们正在建立一个共同的框架,包括数据模型和协议,以便能够直接将数据传输到参与的在线服务提供商之间。.zip

    数据传输项目(Data Transfer Project,DTP)是一个重要的开源项目,旨在简化用户在不同在线服务提供商之间迁移数据的过程。这个项目的核心目标是构建一个通用的框架,它包含了数据模型和协议,使得用户的数据能直接...

    微程序控制器的流水模型计算机设计

    **接线与硬件配置**:在实验设备部分,描述了如何正确连接和设置实验仪器,例如TEC-4计算机组成原理实验仪、双踪示波器等,以及如何将控制器、指令寄存器、数据通路等各个部分的信号线连接,以实现正确的数据流动和...

    数据传输实验(Logisim平台)计算机组成原理.docx

    实验小结部分,学生通常会总结他们在实验中学到的知识点,如理解总线控制、组件功能以及如何通过逻辑电路实现数据传输。这种实践操作加深了对计算机组成原理的理解,特别是关于数据在计算机硬件中的流动方式,为后续...

    DMA控制器 APB

    **DMA(Direct Memory Access)控制器**是嵌入式系统和计算机架构中的关键组件,负责在无需CPU干预的情况下实现数据的高效批量传输。在本文档中,我们将深入探讨Altera公司开发的具有Avalon接口的DMA控制器核心,该...

    USB数据流模型.doc

    - **错误处理机制**:描述了 USB 在数据传输过程中如何处理错误,确保数据传输的可靠性和完整性。 #### 五、总线访问管理 - **调度算法**:介绍了 USB 系统使用的调度算法,用于有效管理和分配带宽资源。 - **...

    基于单片机的USB传输系统的设计与实现

    - **USB接口控制器**:SL8111HS作为USB接口控制器,负责与USB总线的通信,是实现USB功能的关键组件之一。 - **串行接口电路**:串行接口用于与其他设备进行通信,例如与PC进行数据交换。 #### 4. 软件实现过程 ...

    网络游戏-在网络交换设备中的并行数据链路层控制器.zip

    并行数据链路层控制器是网络通信中一个关键组件,它负责在物理层之上提供可靠的数据传输服务。 首先,我们要理解数据链路层(Data Link Layer)在OSI七层模型中的位置和作用。它是第二层,负责在两个相邻节点之间...

    电信设备-一种实现双控制器通信的通信方法及通信模型.zip

    控制器之间的通信协议栈需要精心设计,以支持高效的数据传输和同步。 总结来说,“电信设备-一种实现双控制器通信的通信方法及通信模型”涵盖了冗余设计、心跳检测、数据同步、负载均衡、通信模式、错误恢复策略、...

    linux设备驱动之USB主机控制器驱动分析

    USB主机控制器驱动是内核中的一层软件,它与硬件接口,执行设备枚举、数据传输等任务。本文将深入探讨USB主机控制器驱动的工作原理和关键概念。 首先,我们需要了解USB架构。在Linux中,USB驱动模型分为三个层次:...

    基于HCI层蓝牙主机主机控制器通信的设计与实现

    在此模型中,HCI层作为蓝牙模块与主机之间的软硬件接口,提供了一个统一的界面来控制基带与链路控制器、链路管理器以及状态寄存器等硬件组件。主机与主机控制器之间的通信通过HCI层完成,其中主机负责运行HCI层以上...

    FDMA(DDR3 控制器)

    5. **同步与异步接口**:控制器通常有与CPU或其他系统组件的同步接口,以及与DDR3内存的异步接口,需要处理两者之间的时钟域转换。 6. **资源优化**:在FPGA中,需要考虑逻辑资源、时序和功耗等因素,通过Vivado的...

    sdram_uart.rar_B7Z_sdram控制器设计_串口验证模型_多串口

    在电子设计领域,SDRAM(Synchronous Dynamic Random-Access Memory)控制器是系统设计中的关键组件,它负责管理和协调与SDRAM内存芯片之间的通信。SDRAM控制器设计涉及到多个复杂的功能模块,如初始化、刷新管理、...

    基于MScom组件通信源程序件的COM口

    通过这个程序,开发者可以轻松地与各种支持串口通信的硬件设备进行交互,例如工业控制器、传感器、打印机等。同时,了解并掌握COM组件的使用以及串口通信的相关参数设置,对于提升软件的兼容性和稳定性至关重要。

    《功率变换器和电气传动的预测控制》的MATLAB模型—完整

    使用者可以通过模型来观察和分析预测控制器的决策过程,了解其对系统性能的影响。此外,模型还可以用于研究和优化控制器参数,以适应不同的应用需求。 《功率变换器和电气传动的预测控制》的MATLAB模型,不仅包含...

    javafx显示多个窗口以及javafx多窗口之间数据交互传输项目原文件

    在这个“javafx显示多个窗口以及javafx多窗口之间数据交互传输项目原文件”中,我们可以学习到如何在JavaFX中创建并管理多个窗口,以及在这些窗口之间进行数据的交换和传递。 1. **创建JavaFX窗口** 在JavaFX中,...

    Delphi模型飞机测控平台源码(串口相关).rar

    4. **指令发送**:根据用户的操作,程序将控制指令转化为串行数据,通过TSerialPort组件发送到飞机的控制器。 5. **错误处理与调试**:良好的错误处理机制是任何软件的基础。源码中可能会包含对串口通信异常的处理...

    网络游戏-以可变时隙传输数据的面向数据包数据网络的过程和控制器.zip

    本资料"网络游戏-以可变时隙传输数据的面向数据包数据网络的过程和控制器"深入探讨了这一核心问题,尤其是关注如何通过可变时隙技术优化数据在网络中的传输。 首先,面向数据包的数据网络是一种基于IP(Internet ...

    经典BT蓝牙数据传输流程

    在理解经典蓝牙(BT)的数据传输流程时,我们需要先了解其基本架构和各个组件的作用。经典蓝牙技术基于蓝牙核心规格,如Core_v5.4,它定义了一个分层的通信模型,确保了不同设备间可靠的数据交换。以下是BT蓝牙数据...

    基于装饰器模式的卫星控制系统数据处理与传输.pptx

    ### 基于装饰器模式的卫星控制系统数据处理与传输 #### 一、装饰器模式概述与卫星控制系统适配性分析 ##### 装饰器模式概述: **定义:** 装饰器模式是一种允许在不修改已有类的情况下,动态地向已有类添加新的...

    mvc模型登录注册

    这种模式将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller),以实现数据、展示和业务逻辑的分离。 1. **模型(Model)**: 模型是应用的核心,负责处理业务逻辑和数据管理。它与...

Global site tag (gtag.js) - Google Analytics