Weblet小程序的应用部分

内容是复制别人的代码,思路可以跟着一起看看,具体实现根据个人项目实现。

1.首先 搭建好基础环境,这个 用 uap的小伙伴 一般都知道.就不讲了.
2.new一个 UAP 项目 就叫做csdn把. 数据库选择好,然后在项目的webContent>WEB-INF>configuration下
就会出现一个 datasource.xml 这个是自动生成的有关你 数据库配置的文件,知道就行,不要去动它.


3.新建一个模块项目csdn-modul,然后把 这个模块项目 加入到,之前那个 uap项目csdn中.
也就是 在 uap 的配置文件中把这个 模块的文件位置加入进去.


在 csdn项目的 policy.xml 文件中加入刚刚new 的模块

4.在 csdn-modul 的 face下面new 一个 mx weblet 取名叫做 holiday (face是专门放跟前端有的关代码)
场景名称 就是 weblet的名称,场景描述 就是 后面页面展示出来的标题.这里我们勾选下 生成默认 view

 然后点击列表,名称我们不做更改, 然后 finish。

new 了一个 叫做 holiday 生成了一个 默认的 表单视图.
  其中 MainView 一般是用来 编写视图内容的,而 MainViewController是用来放 MainView 事件 逻辑实现的.

 


2.由于,MainViewController 中导入了 MainView. 所以实际上在 MainViewController 中就可以使用到 MainView 中的对象.
两者 其实是 一个代码整体,逻辑上 区分开来方便写代码而已. 这就是weblet的特性.

 


 3.new 一个 mx 视图 指定 为 表单视图,命名为 DetailView
然后在MainViewController 中  $import("holiday.views.DetailViewController");

因为 列表 进行 增加 和修改操作时,需要 弹出 DetailView (表单)来 ,完成对应的的操作.

而 DetailViewController 里面 又 导入了 DetailView ,所以 MainViewController 实际是

导入了所有代码的一个整体.

由于实际操作中,细节太多 而且很多是纯代码.所以我就直接 在 下一篇文章中粘贴代码过来.
我会多写点注释,方便阅读代码.

直接上代码了,这里是 一个比较 简单的 weblet 增删改查的 表单.

项目名为 holiday ,weblet 也叫 holiday.

主要代码在 模块 holiday-basic 里.

我 的数据库 里也有 holiday 这个表.

字段是:

MainView 是列表视图(点击新增时触发事件,弹出的对话框),DetailView 是表单视图

提一点,访问 weblet 的 默认地址是, ip:port/项目名/模块名/weblet名/index.jsp

例如: http://localhost:9000/holiday/holiday-basic/holiday/index.jsp

先放 项目截图:

 ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------

MainView.js

$ns("holiday.views");
 
$import("mx.controls.ToolBar");
$import("mx.datacontrols.DataGrid");
 
holiday.views.MainView = function() {
	// 这里有一部分,是自动生成的 
	var me = $extend(mx.views.View);
	var base = {};
 
	me.dataGrid = null;
 
	base.init = me.init;
	me.init = function() {
		base.init();
 
		_initControls();
	};
 
	function _initControls() {
		/* 初始化 ToolBar,这里是 显示出页面的 工具栏,items 里的字段是自定义的 */
		me.toolBar = new mx.controls.ToolBar({
			width : "100%",
			items : [ {
				name : "new",
				text : "添加记录",
				// mx.msg("NEW")跟 直接写 "新建" 效果一样
				toolTip : mx.msg("NEW"),
				// 这是框架自带 图片,可以自己指定
				imageKey : "add",
				// me.controller._btnNew_onclick 是你自己写的,要在 MainViewController 
				// 里面有这个方法,方法实现 你自己写
				onclick : me.controller._btnNew_onclick
			}, "-", {
				name : "delete",
				text : "删除记录",
				toolTip : mx.msg("DELETE"),
				imageKey : "delete",
				onclick : me.controller._btnDelete_onclick
			}, "-", {
				name : "edit",
				text : mx.msg("EDIT"),
				toolTip : mx.msg("EDIT"),
				imageKey : "edit",
				onclick : me.controller._btnEdit_onclick
			} ]
		});
 
		me.addControl(me.toolBar);
		 var gridEntity = new mx.datacontainers.GridEntityContainer({
		 // ~/rest 是代表本项目地址
		// 这个 URL 是 你向 后台获取数据 生成表单的 地址,后台会有对应的 方法,返回数据
		 baseUrl : holiday.mappath("~/rest/holiday/list"),
		 // primariy 在这里 和下面 写效果一样都是,ID 这列被隐藏
		// primaryKey : "ID",
		 loadMeta : false
		 });
		/* 初始化 DataGrid */
		me.dataGrid = new mx.datacontrols.DataGrid({
			displayCheckBox : true,
			allowEditing : false,
			//这里指定了 容器实体(entityContainer),就只需要在 entityContainer 写 url 就可以了
			entityContainer : gridEntity,
			//  指定主键列名,指定的 ID 在 列表中会被隐藏
			//primaryKey : "ID",
			// 这个 height 不写,会默认 100% 
			// 然后... 翻页的工具就会被隐藏.所以一定要自己写下这个
			height:"60%",
			// 默认的一页显示多少条记录
			pageSize: 5,
			// 一页最多显示 多少条记录 ,这里指定了 5 10 15 20 这几个选项
			pageSizeOptions : [ 5, 10, 15, 20 ],
			// 这下面几个属性,只是做 微调用的 ,没什么重要性
			enableCellTip : true,// 是否显示单元格title提示
			displayColSplitLine: false,
		    autoWrap : true,
		    
			//  设置显示列的字段,也就是 每一列 最上面那个
			columns : [{
				name : "ID", // 这个就是上面指定的 	primaryKey : "ID",
				caption : "请假编号",
				readOnly : true,
				editorType : "TextEditor",
				align : "center",
				dataAlign : "center",
				width : "100"
			},{
				name : "USERID",
				caption : "请假员工编号",
				readOnly : true,
				editorType : "TextEditor",
				align : "center",
				dataAlign : "center",
				width : "100"
			}, {
				name : "REQUEST_DATE",
				caption : "申请发起日",
				readOnly : true,
				editorType : "TextEditor",
				align : "center",
				dataAlign : "center",
				width : "100"
 
			}, {
				name : "REQUEST_REASON",
				caption : "请假理由",
				readOnly : false,
				editorType : "TextEditor",
				align : "center",
				dataAlign : "center",
				width : "135"
 
			}, {
				name : "REQUEST_DAYS",
				caption : "假期申请号",
				readOnly : true,
				editorType : "TextEditor",
				align : "center",
				dataAlign : "center",
				width : "100"
 
			}, {
				name : "APPROVER_UID",
				caption : "审批人编号",
				readOnly : false,
				editorType : "TextEditor",
				align : "center",
				dataAlign : "center",
				width : "100"
 
			}, {
				name : "STATE",
				caption : "审批状态",
				readOnly : false,
				editorType : "TextEditor",
				align : "center",
				dataAlign : "center",
				width : "100"
			} ],
			//  设置查询条件。
			searchBox : new mx.datacontrols.DataGridSearchBox({
				fields : [
				         //这里是查询栏,字段自定义.我这里没写.页面也就不会显示出来
				]
			})
		});
		//下面 是自动生成的 不必管它
		me.addControl(me.dataGrid);
 
		me.on("activate", me.controller._onactivate);
	}
 
	return me.endOfClass(arguments);
};

MainViewController.js

$ns("holiday.views");
$import("holiday.views.MainView");
$import("holiday.views.DetailViewController");
 
holiday.views.MainViewController = function()
{
    var me = $extend(mx.views.ViewController);
    var base = {};
    
    me.getView = function()
    {
        if (me.view == null)
        {
            me.view = new holiday.views.MainView({ controller: me });
        }
        return me.view;
    };
    
    me._onactivate = function(e)
    {
        // 窗体激活时的逻辑。
	if (me.view != null && typeof(me.view.dataGrid) != "undefined")
	{
 	    me.view.dataGrid.load();
	}	
    };
    
    /** 点击删除时的逻辑 */
    me._btnDelete_onclick = function(){
    	//被选定的主键ID
        //me.view.dataGrid.removeItems(me.view.dataGrid.getCheckedIDs());
        var param_data = me.view.dataGrid.getCheckedIDs();
        if (param_data.length<1) {
			mx.indicate('info','请先选择记录');
		}else {
			me.view.dataGrid.removeItems(param_data);
			mx.indicate('info','删除成功');
		}
    };
    /** 创建几个新建表单时要用的变量 */
    var deView = null;
    var deViewController = null;
    var deWin = null;
    /** 创建表单的函数 */
    var createDeView = function(flag_inf){
    	if (deViewController==null) {
			console.log('try to define a Controller');
			deViewController = new holiday.views.DetailViewController();
		}
    	deView = deViewController.getView();
    	// 改变了 objID 使用 Detail 使用 remote 获取数据直接向后台传递ID 值
    	deView.objID = flag_inf;
    	console.log('create over');
    }
    
    //下面两个事件是 MainView 里面  工具栏 里的 点击方法实现
    /** 点击新建时的逻辑 */
    me._btnNew_onclick = function(){
    	/** 新建的标识参数,新建 和编辑 都是用一个 DetailView
    	 *  用 这个参数区分 是 新建还是 编辑
    	 *  objID 会在 Detail 获取数据时被加入到 请求中 */
    	// 点击新建的 请求url 这里 我换行了
    	// http://localhost:9000/holiday/holiday-basic/rest/holiday/info/new
    	// ?rnd=7096021947873800&params={"columns":"ID,USERID,REQUEST_DATE,REQUEST_REASON,
    	 // REQUEST_DAYS,APPROVER_UID,STATE"}&_=1532837278101
    	var flag_inf = 'new';
		// 调用下弹窗函数
		createDeView(flag_inf);
		/** 给deWin 赋值,把表单视图作为参数  */
		/** 获取上下文,窗体管理,创建表单视图 参数为创建的表单 */
		deWin = me.getContext().windowManager.createFromView(deView);
		/** 可再次使用 true */
		deWin.reusable = true;
		/** 关闭事件 */
		deViewController.closeWin = function(){
			deWin.close();
			me.view.dataGrid.load();
		};
		/** 将当前窗口以独占对话框的形式打开。该方法会依次触发 onactivate 和 onshown 事件。 */
		deWin.showDialog();
	
    };
    
    
    var _detailView = null;
    var _win = null;
    /** 点击编辑时的逻辑 */
    me._btnEdit_onclick = function(){
    	
    	/** 默认新建 增加 一条 数据格 (dataGrid) */
    	// 被选中的 那一条数据对象
    		console.log(me.view.dataGrid.selection);
    		// 选择的 与字段相应的数据对象
    		//console.log(me.view.dataGrid.selection.values);
    	// 被选中的所有数据对象数组  >> 该数组不是勾选项的集合。
    		console.log(me.view.dataGrid.selections);
    		
    		console.log(me.view.dataGrid.getCheckedIDs());
    		console.log(me.view.dataGrid.getCheckedItems());
    		// 勾选的 与字段相应的数据对象
    		//console.log(me.view.dataGrid.getCheckedItems.values);
    	//me.view.dataGrid.appendItem();
    		
    	var checked_ids = me.view.dataGrid.getCheckedIDs();
    	//console.log(Select_values)
    	if (checked_ids !=null && checked_ids.length==1) {
    		var flag_inf = me.view.dataGrid.getCheckedItems()[0].values.ID;
    		// 调用下弹窗函数
    		createDeView(flag_inf);
    		/** 给deWin 赋值,把表单视图作为参数  */
    		deWin = me.getContext().windowManager.createFromView(deView);
    		/** 可再次使用 true */
    		deWin.reusable = true;
    		
    		deViewController.closeWin = function(){
    		deWin.close();
    		me.view.dataGrid.load();
    		};
    		/** 将当前窗口以独占对话框的形式打开。该方法会依次触发 onactivate 和 onshown 事件。 */
    		deWin.showDialog();
		}else{
			mx.indicate('info','您的选择有误');
		}
    };
    
    return me.endOfClass(arguments);
};

 

这里贴一张 效果图片,下篇 贴 DetailView (表单)的代码.

其中 会显示,请假编号 这一列 ,是我 注释掉了 primaryKey: "ID" 的效果

 

 

DetailView.js

 

$ns("holiday.views");
 
$import("mx.controls.ToolBar");
$import("mx.datacontrols.DataForm");
 
holiday.views.DetailView = function() {
	var me = $extend(mx.views.View);
	var base = {};
 
	me.objID = null;
 
	me.form = null;
 
	base.init = me.init;
	me.init = function() {
		base.init();
 
		_initControls();
	};
	
	function _initControls() {
		// 表单的 工具栏 ,我只添加了一条 保存的工具
		var toolBar = new mx.controls.ToolBar({
			width : "100%",
			items : [ {
				name : "save",
				text : mx.msg("SAVE"),
				imageKey : "save",
				toolTip : mx.msg("SAVE"),
				// _btnSave_onclick 这个方法 DetailViewController 要有
				// 具体实现自己 编写
				onclick : me.controller._btnSave_onclick
			} ]
		});
		
		me.addControl(toolBar);
		/** 获取下面字段的 值传给后台 */
		//var all_data = me.view.form.entityContainer.data;
		//console.log(me.view.form.entityContainer.dicts);
		var deFormEntity = new mx.datacontainers.FormEntityContainer({
			baseUrl : holiday.mappath("~/rest/holiday/info"),
			primaryKey : "ID",
			// 根据 FieldsName,自动赋值到本地
			// 从后端,加载 表单的数据
			type: "remote",
			// 表示当前数据容器是否有元数据信息
			// true 的话,弹出此表单会 额外发送一条 url 请求
			loadMeta:false
		})
		me.form = new mx.datacontrols.DataForm({
			entityContainer : deFormEntity,
			// TODO 指定主键列名
			// TODO 指定显示列数组
			fields : [ {
				name : "ID",
				caption : "编号",
				editorType : "NumberEditor",
				colSpan: "2",
				readOnly : false
			},{
				name : "USERID",
				caption : "请求人编号",
				colSpan: "2",
				editorType : "NumberEditor",
				readOnly : false
			},{
				name : "REQUEST_DATE",
				caption : "请假发起日期",
				editorType : "DateTimeEditor",
				colSpan: "2",
				readOnly : false
			},{
				name : "REQUEST_REASON",
				caption : "请假原因",
				editorType : "TextEditor",
				colSpan: "5",
				readOnly : false
			},{
				name : "REQUEST_DAYS",
				caption : "请假天数",
				editorType : "NumberEditor",
				colSpan: "2",
				readOnly : false
			},{
				name : "APPROVER_UID",
				caption : "审批人编号",
				colSpan: "2",
				editorType : "NumberEditor",
				readOnly : false
			},{
				name : "STATE",
				caption : "状态",
				colSpan: "2",
				// 下拉选的类型
				editorType : "DropDownEditor",
				allowEditing: false, 
				// 指定显示的 是 name
				displayMember: "name",
				// 指定实际值 是 name
				valueMember: "name",
				// 下拉选里面的元素
				items: [ { name: "待批准" }, { name:"已批准"},{ name: "不批准"}] ,
				readOnly : false
			} ]
		});
 
		me.addControl(me.form);
 
		me.on("activate", me.controller._onactivate);
	}
 
	return me.endOfClass(arguments);
};

 

 

DetailViewController.

$ns("holiday.views");
$import("holiday.views.DetailView");
 
holiday.views.DetailViewController = function(selectValues) {
	var me = $extend(mx.views.ViewController);
	var base = {};
 
	me.getView = function() {
		if (me.view == null) {
			me.view = new holiday.views.DetailView({
				controller : me
			});
		}
		return me.view;
	};
 
	me._onactivate = function(e) {
		// TODO: 窗体激活时的逻辑。
		if (me.view != null && typeof (me.view.form) != "undefined") {
			me.view.form.load(me.view.objID);
		}
	};
	// 创建 一个RESTClient,利用这个 向后台发送请求 (这个就是框架封装的 Ajax)
	var client_edit = new mx.rpc.RESTClient({
		baseUrl : holiday.mappath("~/rest/holiday")
	});
	// 回掉函数
	var call_backFun =  function(obj) {
		if (obj.successful) {
			mx.indicate("info", "修改成功");
			// dataGrid.load();
		} else {
			mx.indicate("info", "sorry,修改失败");
		}
	}
 
	/** 编辑时点击保存的逻辑 */
	me._btnSave_onclick = function() {
		var all_data = me.view.form.entityContainer.data;
		// me.view.form.save();
		// 这里 给  view的objID 赋值,是因为向后台发送请求时,会把 这个 objID 拼上去
		// 这个 view 其实 就是 DetailView me就是 DetailViewController 对象
		// me 也就是本身
		if (me.view.objID == 'new') {
			client_edit.get("/new",all_data,call_backFun);
		} else {
			client_edit.get("/saveEdit", all_data,call_backFun);
		}
		console.log("保存-调用over!");
 
		// 重新加载数据,不然修改完 需要手动刷新页面 才看得到效果
		// me.view.form.load();
	};
 
	return me.endOfClass(arguments);
};

 

 

 

首先配置问题,在配置文件里 添加包的扫描

把对应的注解了的类,解析为相应组件:

 

 配置文件 命名规则为 xxxResource.xml ,我这里叫 scanResource.xml.

包扫描,是扫描你的 controller 等类所在包位置

scanResource.xml 里的 代码

<?xml version="1.0" encoding="UTF-8"?>
 
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:module="http://www.sgcc.com.cn/schema/platform/module"
	xsi:schemaLocation="http://www.springframework.org/schema/beans     
	http://www.springframework.org/schema/beans/spring-beans.xsd    
	http://www.springframework.org/schema/context    
	http://www.springframework.org/schema/context/spring-context.xsd    
	http://www.sgcc.com.cn/schema/platform/module    
	http://www.sgcc.com.cn/schema/platform/module/module.xsd   
	http://www.springframework.org/schema/mvc    
	http://www.springframework.org/schema/mvc/spring-mvc.xsd">
	<context:component-scan base-package="top.jacktu.controller" />
	<context:component-scan base-package="top.jacktu.bizc" />
</beans>

 

然后是代码结构,视图.  我这里没怎么用到 Emp 所以 有 Emp 字样的 java类 你可以忽略它

bizc 是 业务逻辑层,controller 是对请求的处理方法. po 是放 javaBean 的.

 

===========================================================================================

================================== 分割线===================================================
实体类,Holiday.java

package top.jacktu.po;
 
import java.io.Serializable;
/** Holiday 实体类(JavaBean) */
public class Holiday implements Serializable {
	private static final long serialVersionUID = -2861040546555145433L;
	private int ID;
	private int USERID;
	private String REQUEST_DATE;
	private String REQUEST_REASON;
	private int REQUEST_DAYS;
	private int APPROVER_UID;
	private String STATE;
// .... 后面构造方法,toStrig,getter ,setter 什么的省略了...
 
}

 

 HolidayControllr.java 控制器

package top.jacktu.controller;
 
import java.util.List;
import java.util.Map;
 
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
 
import top.jacktu.bizc.IHolidayBizc;
import top.jacktu.po.Holiday;
 
import com.sgcc.uap.rest.annotation.ItemResponseBody;
import com.sgcc.uap.rest.annotation.QueryRequestParam;
import com.sgcc.uap.rest.annotation.VoidResponseBody;
import com.sgcc.uap.rest.support.QueryResultObject;
import com.sgcc.uap.rest.support.RequestCondition;
import com.sgcc.uap.rest.utils.RestUtils;
 
@Controller
@RequestMapping("/holiday")
public class HolidayController {
	@Autowired
	IHolidayBizc holidayBizc;
 
	/**
	 * 向前端返回 列表 有关数据
	 * 其中 PageIndex 和 PageSize 前端会自动反馈回来 
	 * 这样接收,反馈对应 页面的 数据就可以了 前端 (就是做一个分页查询)
	 * 每次 翻页 都会 向这里请求一次
	 */
	@RequestMapping("/list")
	public @ItemResponseBody
	Object getHolidayList(HttpServletRequest reqeust,
			@QueryRequestParam("params") RequestCondition param) {
		System.out.println(param.getPageIndex());
		System.out.println(param.getPageSize());
		System.out.println(param.getColumns());
		return holidayBizc.getHolidayList();
	}
 
	/** 前端加载元数据的请求地址,我这里是空实现 和返回 */
	@RequestMapping("/list/meta")
	public @ItemResponseBody
	Object getHolidayListMeta(HttpServletRequest reqeust) {
		return "";
	}
 
	// {"ids":[2,3,4]} id 传递过来的形式
	// 通过这个删除数据库 里的一些数据,实现操作
	@RequestMapping("/list/delete")
	public @VoidResponseBody
	Object delHoliday(HttpServletRequest reqeust,
			@RequestBody Map<String, List<String>> values) {
		holidayBizc.DeleteHolidayByIds(values.get("ids"));
		return null;
	}
 
	/** 新建一条记录 时的预填数据,也就是弹出 新建 表单时的 ,数据返回 */
	@RequestMapping("/info/new")
	public @ItemResponseBody
	QueryResultObject newHoliday(HttpServletRequest reqeust,
			@ModelAttribute Holiday holiday) {
		Map<String, Object> map = holidayBizc.getNewInfo();
		// return RestUtils.wrappQueryResult(map);
		return RestUtils.wrappQueryResult(map);
	}
 
	/** 插入一条记录 */
	@RequestMapping("/new")
	// ModelAttribute
	public @VoidResponseBody
	Object insertNewInfo(HttpServletRequest request,
			@ModelAttribute Holiday holiday) {
		holidayBizc.insertOneHoliday(holiday);
		return null;
	}
 
	/** 点击编辑时的事件,弹出表单请求数据 时 ,数据返回 */
	@RequestMapping("/info/{id}")
	public @ItemResponseBody
	QueryResultObject getHolidayInfo(HttpServletRequest reqeust,
			@PathVariable Integer id, @RequestParam("params") String param) {
		Map<String, Object> map = holidayBizc.getInfoById(id);
		return RestUtils.wrappQueryResult(map);
	}
 
	/** 保存对 假期的修改 */
	@RequestMapping("/saveEdit")
	// ModelAttribute
	public @VoidResponseBody
	Object saveEdit(HttpServletRequest request, @ModelAttribute Holiday holiday) {
		holidayBizc.saveEdit(holiday);
		return null;
	}
}

 

HolidayBizc.java

package top.jacktu.bizc;
 
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import top.jacktu.po.Holiday;
 
import com.sgcc.uap.persistence.IHibernateDao;
import com.sgcc.uap.rest.support.QueryResultObject;
import com.sgcc.uap.rest.utils.RestUtils;
/**
 * 这个时 业务层(逻辑实现),又可以直接调用一些API 但是我没用.
 * 作为演示,很多sql 语句都是自己编写的.
 * @author jacktu
 *
 */
@Service
public class HolidayBizc implements IHolidayBizc{
	
	@Autowired
	IHibernateDao hibernateDao;
	 // 获取表单数据,这里要做一个 分页查询.
	//我这里没有写,需要自己 根据 pageIndex 与 pageSize实现
	@Override
	public QueryResultObject getHolidayList() {
		String sql = "select " +
				"ID,"+
				"USERID,"+
				"TO_CHAR(REQUEST_DATE,'YYYY-MM-DD') REQUEST_DATE,"+
				"REQUEST_REASON,"+
				"REQUEST_DAYS,"+
				"APPROVER_UID,"+
				"STATE"+
				" from holiday";
		@SuppressWarnings("unchecked")
		List<Map<String, Object>> list = 
				hibernateDao.queryForListWithSql(sql);
		/**					list后面那个10 是分页查询的一个重要信息.前端会根据这个显示有多少页*/
		return RestUtils.wrappQueryResult(list,10);
	}
	@Override
	public void DeleteHolidayByIds(List<String> ids) {
		String sql = "DELETE FROM HOLIDAY WHERE ID IN (?)";
		sql = sql.replace("?",ids.toString().replace("[", "").replace("]", ""));
		hibernateDao.updateWithSql(sql);
	}
	// 保存编辑后的数据 时,逻辑实现
	@Override
	public void saveEdit(Holiday holiday) {
		String sql = "UPDATE holiday SET " +
				"USERID=?"+
				",REQUEST_DATE=TO_DATE(?,'YYYY-MM-DD')"+
				",REQUEST_REASON=?"+
				",REQUEST_DAYS=?"+
				",APPROVER_UID=?"+
				",STATE=?"+
				" WHERE id=?";
		Object data [] = {
				holiday.getUSERID(),
				holiday.getREQUEST_DATE().replace("00:00:00", ""),
				holiday.getREQUEST_REASON(),
				holiday.getREQUEST_DAYS(),
				holiday.getAPPROVER_UID(),
				holiday.getSTATE(),
				holiday.getID()};
		try {
			System.out.println("开始执行sql");
			hibernateDao.updateWithSql(sql,data);
			System.out.println("执行完毕,over");
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
	// 编辑时 的数据返回
	@Override
	public Map<String, Object> getInfoById(Integer id) {
		String sql = "SELECT * FROM holiday WHERE ID=?";
		@SuppressWarnings("unchecked")
		List<Map<String, Object>> list = 
			hibernateDao.queryForListWithSql(sql,new Object[]{id});
		return list.get(0);
	}
	/** 插入一条数据的 逻辑实现 */
	@Override
	public void insertOneHoliday(Holiday h) {
		System.out.println("we do nothing but we pretend to do so much thing.");
		String sql = "insert into holiday values(?,?,TO_DATE('"
				+h.getREQUEST_DATE().substring(0, 10)+"','YYYY-MM-DD'),?,?,?,?)";
		Object [] aobj = new Object[]{
			h.getID(),h.getUSERID(),h.getREQUEST_REASON(),h.getREQUEST_DAYS()
			,h.getAPPROVER_UID(),h.getSTATE()
		};
		hibernateDao.updateWithSql(sql, aobj);
	}
	// 新建时反馈的信息
	@Override
	public Map<String, Object> getNewInfo() {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("ID", getMaxID("holiday")+1);
		map.put("USERID", "2");
		map.put("REQUEST_DATE", new Date());
		map.put("REQUEST_REASON", "例:身体不舒服,想去医院看看.");
		map.put("REQUEST_DAYS", "3");
		map.put("APPROVER_UID", "1");
		map.put("STATE", "待批准");
		return map;
	}
	/** 获取最大 的 ID,实现自增. 但是我们组不是这样的,这里只是示范 */
	private int getMaxID(String string) {
		String sql = "select max(ID) from holiday";
		int maxInt = hibernateDao.queryForIntWithSql(sql);
		return hibernateDao.queryForIntWithSql(sql);
	}
	
}

 

基本就是这些内容。

基本就这些,代码粘过去哪里不能实现.自行解决吧,应该也不会有什么大问题.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值