1. 程式人生 > >angularJs 從前端到後端 json 串傳參

angularJs 從前端到後端 json 串傳參

<%@ page language="java" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="ctx" value="${pageContext.request.contextPath}" />
<html>

<head>
<base href=" <%=basePath%>">
<meta charset="UTF-8">
<title>EDU教育雲平臺</title>
<link rel="stylesheet" href="${ctx}/css/pc-edu-css/layui.css">
<link rel="stylesheet" href="${ctx}/css/pc-edu-css/xzdd.css">
<%-- <script src="${ctx}/js/jquery-3.0.0.js"></script> --%>
<script type="text/javascript" src="${ctx}/js/pc-edu-js/jquery.min.js"></script>
<script src="${ctx}/plugins/angularjs/angular.min.js"
	type="text/javascript">
	
</script>
</head>

<body class="layui-layout-body" ng-app="insertOrder"
	ng-controller="insertOrderController" ng-init="findGradeList()">
	<div class="layui-layout layui-layout-admin">

		<!-- 功能列表 -->
		<jsp:include page="header.jsp" flush="true" />
		<!-- 功能列表 -->

		<!-- 內容主體區域 -->
		<div class="layui-body">
			<span id="content-title">賬單錄入</span>
			<div style="height:100%;overflow:auto;background:#fff;">
				<div style="width:100%;line-height:40px;">
					<p class="tit">訂單資訊</p>
					<div class="title">
						<span style="margin-right:30px;">訂單型別選擇:</span> <input
							type="radio" id="radio1" name="radio" checked="checked" value=1 /><label
							for="radio1">繳費</label> <input type="radio" id="radio2"
							name="radio" value=0 /><label for="radio2">退費</label>
						<button class="sumtit" ng-click="createOrder();">訂單生成</button>
					</div>
					<hr>
					<div class="left">
						年級:<select size="1" id="grade">
							<option value="">請選擇</option>
							<option ng-repeat="grade in gradeList"
								ng-click="findClassList(grade);">{{grade.gradeName}}</option>
						</select> <br> 班級:<select size="1" id="classname">
							<option value="">請選擇</option>
							<option ng-repeat="class in classList"
								ng-click="findStudentList(class);">{{class.className}}</option>
						</select> <br> 學生:

						<div id="div1" class="students">
							<div ng-repeat="student in studentList">
								<input type="checkbox" style="margin-left:15px;"
									value="{{student.xsid}}" /> {{student.name}}<span
									style="font-size:12px;color:#777;">({{student.sfzhm}})</span>
							</div>
						</div>
						<input id="btn2" type="button" class="all" value="取消" /> <input
							id="btn1" type="button" class="all" value="全選" />

					</div>
					<div class="middle"></div>
					<div class="right">
						<div class="titname">
							費用名稱<img id="AddMoreFileBox" class="btn btn-info"
								src="${ctx}/images/pc-edu-images/jfaddicon.png" max-lenght=10>
							<div id="InputsWrapper">
								<div class="addone">
									<input type="text" name="mytext[]" id="field_1"
										placeholder="費用名稱 1" maxlength="10" /><input type="number"
										name="mytext[]" id="money_1" placeholder="費用金額 1" /><br>
									<select size="1" id="month_1"><option value="0"
											style="color:#999;">請選擇繳費月份</option>
										<option value="1月份">1月份</option>
										<option value="2月份">2月份</option>
										<option value="3月份">3月份</option>
										<option value="4月份">4月份</option>
										<option value="5月份">5月份</option>
										<option value="6月份">6月份</option>
										<option value="7月份">7月份</option>
										<option value="8月份">8月份</option>
										<option value="9月份">9月份</option>
										<option value="10月份">10月份</option>
										<option value="11月份">11月份</option>
										<option value="12月份">12月份</option>
									</select><input type="text" name="mytext[]" maxlength="30" id="text_1"
										placeholder="備註 1" /><a href="#" class="removeclass"><img
										src="${ctx}/images/pc-edu-images/jfjianicon.png"></a>
								</div>
							</div>
						</div>

					</div>


				</div>
			</div>
		</div>
		<!-- 底部固定區域 -->
		<div class="layui-footer">© 西安遠眺網路科技有限公司</div>
	</div>
</body>
<!-- 選單展開 start -->
<script src="${ctx}/js/layui/layui.all.js"></script>
<script>
	window.onload = function() {//先從html文件中獲取oDiv元素;再從oDiv元素中獲取input
		var oBtn1 = document.getElementById('btn1');
		var oBtn2 = document.getElementById('btn2');
		var oBtn3 = document.getElementById('btn3');
		var oDiv = document.getElementById('div1');
		var aCh = oDiv.getElementsByTagName('input');//getElementsByTagName容易寫錯
		oBtn1.onclick = function() {
			for (var i = 0; i < aCh.length; i++) {//當上麵條件成立的時候,下面語句會一直執行,直到條件不成立為止
				aCh[i].checked = true;
			}
			;
		};
		oBtn2.onclick = function() {//當上麵條件成立的時候,下面語句會一直執行,直到條件不成立為止
			for (var i = 0; i < aCh.length; i++) {
				aCh[i].checked = false;
			}
			;
		}

	}
</script>

<script>
	var FieldCount = 1; //to keep track of text box added
	$(document)
			.ready(
					function() {
						var MaxInputs = 8; //maximum input boxes allowed
						var InputsWrapper = $("#InputsWrapper"); //Input boxes wrapper ID
						var AddButton = $("#AddMoreFileBox"); //Add button ID
						var x = InputsWrapper.length; //initlal text box count

						$(AddButton)
								.click(
										function(e) //on add input button click
										{
											if (x <= MaxInputs) //max input box allowed
											{
												FieldCount++; //text box added increment
												//add input box
												$(InputsWrapper)
														.append(
																'<div class="addone"><input type="text" maxlength="10" name="mytext[]"  id="field_'+ FieldCount +'"  placeholder="費用名稱 '+ FieldCount +'"/><input type="number" name="mytext[]" id="money_'+ FieldCount +'"  placeholder="費用金額 '+ FieldCount +'"/><br> <select size="1"  id="month_'+ FieldCount +'"> <option value="0" style="color:#999;">請選擇繳費月份</option> 	<option value="1月份">1月份</option> <option value="2月份">2月份</option> <option value="3月份">3月份</option><option value="4月份">4月份</option> <option value="5月份">5月份</option> <option value="6月份">6月份</option><option value="7月份">7月份</option> <option value="8月份">8月份</option> <option value="9月份">9月份</option><option value="10月份">10月份</option> <option value="11月份">11月份</option> <option value="12月份">12月份</option></select><input type="text" name="mytext[]" maxlength="30" id="text_'+ FieldCount +'" placeholder="備註 '+ FieldCount +'"/><a href="#" class="removeclass"><img src="${ctx}/images/pc-edu-images/jfjianicon.png"></a></div>');
												x++; //text box increment
											}
											return false;
										});
						$("body").on("click", ".removeclass", function(e) { //user click on remove text
							if (x > 1) {
								$(this).parent('div').remove(); //remove text box
								x--; //decrement textbox
							}
							return false;
						})
					});
</script>
<script>
	//JavaScript程式碼區域
	layui.use('element', function() {
		var element = layui.element;

	});

	layui.use('carousel', function() {
		var carousel = layui.carousel;
		//建造例項
		carousel.render({
			elem : '#test1',
			width : '100%' //設定容器寬度
			,

			arrow : 'always' //始終顯示箭頭
		//,anim: 'updown' //切換動畫方式
		});
	});
</script>
<!-- 選單展開end -->



<script type="text/javascript">
	var app = angular.module('insertOrder', []);
	app.config(function($httpProvider) {
		$httpProvider.defaults.headers.post = {
			'Content-Type' : 'application/x-www-form-urlencoded',
			'charset' : 'utf-8'
		}
	})
	app.controller('insertOrderController', function($scope, $http) {
		//頁面初始化的時候,查詢年級資訊
		$scope.findGradeList = function() {
			$http.get("${ctx}/ManagerSchool/findGradeTable").then(
					function success(response) {
						$scope.gradeList = response.data;
					}, function error(response) {
						layer.alert('查詢年級資料失敗!!!', {
							icon : 5
						});
					});
		}

		//根據年級id查詢該年級的班級資料
		$scope.findClassList = function(selectGrade) {
			console.log("查詢班級=" + selectGrade.gid);
			//獲取班級id
			var gradeId = selectGrade.gid;
			$http.get("${ctx}/ManagerSchool/findClassTable?gradeId=" + gradeId)
					.then(function success(response) {
						$scope.classList = response.data;
					}, function error(response) {
						layer.alert('查詢班級資料失敗!!!', {
							icon : 5
						});
					});
		}

		//根據班級id查詢學生List
		$scope.findStudentList = function(classObj) {
			console.log("查詢學生list=" + classObj.cid);
			//獲取班級id
			var classId = classObj.cid;
			$http.get(
					"${ctx}/orderEnter/selectStudentsByClassId?classId="
							+ classId).then(function success(response) {
				$scope.studentList = response.data;
				console.log("學生list=" + $scope.studentList);
			}, function error(response) {
				layer.alert('查詢學生資料失敗!!!', {
					icon : 5
				});
			});
		}

		//根據班級id查詢學生List
		$scope.findStudentList = function(classObj) {
			console.log("查詢學生list=" + classObj.cid);
			//獲取班級id
			var classId = classObj.cid;
			$http.get(
					"${ctx}/orderEnter/selectStudentsByClassId?classId="
							+ classId).then(function success(response) {
				$scope.studentList = response.data;
				console.log("學生list=" + $scope.studentList);
			}, function error(response) {
				layer.alert('查詢學生資料失敗!!!', {
					icon : 5
				});
			});
		}

		//訂單生成方法
		$scope.createOrder = function() {

			//1.獲取選中單選框的值
			var jtbs = $("input[name='radio']:checked").val();
			console.log("交退費標識=" + jtbs);

			//2.<!--獲取選中複選框的值-->
			var studentIdList = new Array();
			$("input[type=checkbox]:checked").each(function(i) {
				studentIdList[i] = $(this).val();
			});
			console.log("studentIdList=" + studentIdList);

			if (studentIdList == null || studentIdList == "") {
				$.alertView("請選擇賬單學生!!");
				return false;
			}

			//3.獲取訂單list資訊

			console.log("費用條數FieldCount=" + FieldCount);
			var orderList = new Array();

			for (var i = 1; i <= FieldCount; i++) {
				//1.費用名稱
				var xmmc = $("#field_" + i).val();
				console.log("費用名稱" + i + "=" + xmmc);
				if (xmmc == null || xmmc == "") {
					$.alertView("*請輸入費用名稱!");
					return false;
				}
				//2.費用金額
				var je = $("#money_" + i).val();
				console.log("費用金額" + i + "=" + je);
				if (je == null || je == "") {
					$.alertView("*請輸入費用金額!");
					return false;
				}
				//3.訂單月份
				var ddyf = $("#month_" + i + " option:selected").val();
				console.log("訂單月份" + i + "=" + ddyf);
				if (ddyf == null || ddyf == "") {
					$.alertView("*請選擇訂單月份!");
					return false;
				}
				//4.備註
				var ddbz = $("#text_" + i).val();
				console.log("備註" + i + "=" + ddbz);

				//組裝訂單
				var order = {
					//費用名稱
					"xmmc" : xmmc,
					//費用金額
					"je" : je,
					//訂單月份
					"ddyf" : ddyf,
					//備註
					"ddbz" : ddbz
				};
				orderList.push(order);
			}

			var orderEnterBobj = {
				payBack : jtbs,
				studentIdList : studentIdList,
				orderList : orderList
			}
			/* 將陣列轉換為json型別的字串 */
			//var orderListJSON = JSON.stringify(orderList);
			var orderEnterBobjJson = JSON.stringify(orderEnterBobj);
			console.log("訂單list資訊=" + orderList);

			/* if (isCardNo(managerIdCard) == false) {
				$.alertView("您輸入的身份證號格式不正確!!");
				return false;
			} */

			$http({
				method : 'post',
				data : $.param({
					orderEnterBobj : orderEnterBobjJson
					
				}),
				//transformRequest: angular.identity, //使用angular傳參認證
				headers : {
					'Content-Type' : 'application/x-www-form-urlencoded;charset=utf-8'
					//'Content-Type' : 'application/json;charset=utf-8'
				},
				url : '${ctx}/orderEnter/insertOrdetList',
			}).then(function(response) {
				var data = response.data;
				if (data) {
					$.alertView("賬單錄入成功!!");
				} else {
					$.alertView("賬單錄入失敗!!");
				}
			});
		}
	});
</script>
</html>
package com.zichen.xhkq.controller.orderManage;

import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

import net.sf.json.JSONArray;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zichen.xhkq.bojo.OrderEnterBobj;
import com.zichen.xhkq.exception.CustomException;
import com.zichen.xhkq.pojo.Order;
import com.zichen.xhkq.pojo.Student;
import com.zichen.xhkq.service.mine.OrderService;
import com.zichen.xhkq.service.myclass.StudentService;
import com.zichen.xhkq.tools.CmUtil;

@Controller
@RequestMapping("/orderEnter")
public class OrderEnterController {
	private static Logger log = LogManager
			.getLogger(OrderEnterController.class);

	@Resource
	private OrderService orderService;
	@Resource
	private StudentService studentService;


	@RequestMapping("/test23")
	@ResponseBody
	// /@PostMapping(value = "/orderEnter/insertOrdetList",consumes =
	// "application/json")
	public void test23(@RequestParam("orderEnterBobj") String orderEnterBobj) {
		System.out.println("test23======================================="
				+ JSONObject.toJSONString(orderEnterBobj));
		JSONObject jsonObject = JSONObject.parseObject(orderEnterBobj);

		OrderEnterBobj orderEnterBobj123 = (OrderEnterBobj) JSONObject
				.toJavaObject(jsonObject, OrderEnterBobj.class);

		System.out.println("test23======================================="
				+ JSONObject.toJSONString(orderEnterBobj123));
		System.out.println("test23======================================="
				+ JSONObject.toJSONString(orderEnterBobj123.getOrderList()));
		System.out.println("test23======================================="
				+ JSONObject.toJSONString(orderEnterBobj123.getPayBack()));
		System.out
				.println("test23======================================="
						+ JSONObject.toJSONString(orderEnterBobj123
								.getStudentIdList()));
	}

	/**
	 * 訂單錄入
	 * 
	 * @param orderList
	 * @param session
	 * @return
	 * @throws CustomException
	 */
	@RequestMapping("/insertOrdetList")
	@ResponseBody
	// /@PostMapping(value = "/orderEnter/insertOrdetList",consumes =
	// "application/json")
	public boolean insertOrdetList(
			@RequestParam("orderEnterBobj") String orderEnterBobj,
			HttpSession session)  {
		try {
		log.info("insertOrdetList入參=" + JSONObject.toJSONString(orderEnterBobj));

		JSONObject jsonObject = JSONObject.parseObject(orderEnterBobj);

		OrderEnterBobj orderEnter = (OrderEnterBobj) JSONObject.toJavaObject(
				jsonObject, OrderEnterBobj.class);

		Integer payBack = orderEnter.getPayBack();
		List<Integer> studentIdList = orderEnter.getStudentIdList();
		List<Order> orderList = orderEnter.getOrderList();
		// 1.入參校驗
		// 交退費標識
		if (CmUtil.isEmpty(payBack)) {
			
				throw new CustomException("訂單錄入入參交退費標識為空!");			
		}

		// studentIdList
		if (CmUtil.isEmpty(studentIdList)) {
			throw new CustomException("訂單錄入入參studentIdList為空!");
		}

		// b.校驗orderList
		for (Order order : orderList) {

			if (validateInsertOrder(order)) {
				throw new CustomException("訂單錄入入參Order欄位不完整");
			}
		}

		// 2.從session中獲取schoolId 和schoolName
		Integer schoolId = (Integer) session.getAttribute("schoolId");
		String schoolName = (String) session.getAttribute("schoolName");
		if (CmUtil.isEmpty(schoolId)||CmUtil.isEmpty(schoolName)) {
			throw new CustomException("session未獲取到schoolId +schoolName ");
		}

		return orderService.insertOrdetList(schoolId,schoolName, orderList, studentIdList,
				payBack);
		
		} catch (CustomException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
	}

	/**
	 * 根據班級id主鍵查詢學生list
	 * 
	 * @param ssbjid
	 * @return
	 * @throws CustomException
	 */
	@RequestMapping("/selectStudentsByClassId")
	@ResponseBody
	public List<Student> selectStudentsByClassId(
			@RequestParam("classId") Integer classId) throws CustomException {

		// 1.入參校驗
		if (CmUtil.isEmpty(classId)) {

			throw new CustomException("selectStudentsByClassId入參ssbjid為空!");
		}

		// 2. 查詢studentList
		return studentService.selectBySsbjid(classId);

	}

	/**
	 * 校驗入參Order
	 * 
	 * @param order
	 * @return
	 */
	private boolean validateInsertOrder(Order order) {
		return CmUtil.isEmpty(order.getXmmc()) || CmUtil.isEmpty(order.getJe())
				|| CmUtil.isEmpty(order.getDdyf());
	}

}