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);
	}
	
}

 

基本就是這些內容。

基本就這些,代碼粘過去哪裏不能實現.自行解決吧,應該也不會有什麼大問題.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章