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

本文介绍了一个用于MVC框架中控制器与模型间数据传递的JavaBean——ParamBean的设计与实现。该组件利用Hashtable存储参数,支持参数的添加、获取及删除等功能,并能够处理数据库查询结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值