在节制器组件与模子组件之间传送数据
副标题#e#
MVC框架中,节制器组件与模子组件需要彼此传送数据,我们可以写个javaBean来生存。
ParamBean这个javaBean本质上是把数据放在hashtable中,并提供了存放和取出数据等要领。
代码如下:
Java代码
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;
}
}
#p#副标题#e#
#p#分页标题#e#
以上代码都很好领略,主要是add_param(),set_crs()要领主要是把数据库执行查询后获得的ResultSet通过CachedRowSetImpl的populate要领放进CachedRowSetImpl里,至于为什么要放到CachedRowSetImpl里处理惩罚,参看些jdbc编程方面的常识。(TO-DO)
写好这个javaBean后,在节制器组件里可以把在前台传进来的值通过add_param()要领放进来,如下:
Java代码
param_bean param = new param_bean();
String dep_code = (String)request.getSession().getAttribute("LOGIN_USER_DEP");
param.add_param("DEP_CODE", dep_code);
在模子组件里可以按照传进来的这个param来取到值,举办一些数据库的操纵,如下:
Java代码
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举办越发巨大的处理惩罚,如下:
Java代码
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三层布局中在在节制器组件与模子组件之间传送数据大抵先容完成了:)