一、实验介绍

1.1 实验内容

本节课程主要利用 easyUI 实现系统的前端页面。

1.2 实验知识点

  • easyUI
  • JavaScript
  • html

1.3 实验环境

  • JDK1.8
  • Eclipse JavaEE

二、实验步骤

2.1 表现层相关文件获取

打开终端,输入以下命令获取相关文件,包括 easyui、jQuery 等相关文件,保存到目录 /home/shiyanlou/ 下。

wget http://labfile.oss.aliyuncs.com/courses/824/fontendFiles.tar

解压文件到 /home/shiyanlou/ 下。

tar zxvf fontendFiles.tar

然后将 /home/shiyanlou/fontendFiles 文件夹下的全部文件夹拷贝到项目 hrmssrc->main->webapp 下。

2.2 login.jsp

在项目 hrmssrc->main->webapp 下新建 JSP 页面 login.jsp 作为系统的登录页面,并添加如下代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//Dtd HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>hrms-login</title>
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
<style type=text/css>
body {
text-align: center;
padding-bottom: 0px;
background-color: #ddeef2;
margin: 0px;
padding-left: 0px;
padding-right: 0px;
padding-top: 0px
} A:link {
COLOR: #000000;
text-decoration: none
} A:visited {
COLOR: #000000;
text-decoration: none
} A:hover {
COLOR: #ff0000;
text-decoration: underline
} A:active {
text-decoration: none
} .input {
border-bottom: #ccc 1px solid;
border-left: #ccc 1px solid;
line-height: 20px;
width: 182px;
height: 20px;
border-top: #ccc 1px solid;
border-right: #ccc 1px solid
} .input1 {
border-bottom: #ccc 1px solid;
border-left: #ccc 1px solid;
line-height: 20px;
width: 120px;
height: 20px;
border-top: #ccc 1px solid;
border-right: #ccc 1px solid;
}
</style>
<script type="text/javascript">
/* 登录 */
function login() {
var username = $("#username").val();
var password = $("#password").val();
if (username == null || username == "") {
alert("username can't be empty\uff01");
return;
}
if (password == null || password == "") {
alert("password can't be empty\uff01");
return;
}
$("#adminlogin").submit(); }
/* 用户名或密码错误时显示 */
if ('${errorMsg}' != '') {
alert('${errorMsg}');
}
/* 拦截器显示信息 */
if ('${message}' != '') {
alert('${message}');
}
</script>
</head>
<body>
<form id=adminlogin method=post name=adminlogin
action="${pageContext.request.contextPath}/admin/login">
<div></div>
<table style="margin: auto; width: 100%; height: 100%" border=0
cellSpacing=0 cellPadding=0>
<tbody>
<tr>
<td height=150>&nbsp;</td>
</tr>
<tr style="height: 254px">
<td>
<div style="margin: 0px auto; width: 868px">
<img style="display: block"
src="${pageContext.request.contextPath}/images/body_03.jpg">
</div>
<div style="background-color: #278296">
<div style="margin: 0px auto; width: 936px">
<div
style="BACKGROUND: url(${pageContext.request.contextPath}/images/body_05.jpg) no-repeat; height: 155px">
<div
style="text-align: left; width: 265px; float: right; height: 125px; _height: 95px">
<table border=0 cellSpacing=0 cellPadding=0 width="100%">
<tbody>
<tr>
<td style="height: 45px"><input type="text"
class=input value="${admin.username}" name="username"
id="username"></td>
</tr>
<tr>
<td><input type="password" class=input
value="${admin.password}" name="password" id="password" /></td>
</tr>
</tbody>
</table>
</div>
<div style="height: 1px; clear: both"></div>
<div style="width: 380px; float: right; clear: both">
<table border=0 cellSpacing=0 cellPadding=0 width=300>
<tbody> <tr>
<td width=100 align=right><input
style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px"
id=btnLogin
src="${pageContext.request.contextPath}/images/btn1.jpg"
type=image name=btnLogin onclick="javascript:login();"></td>
<td width=100 align=middle><input
style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px"
id=btnReset
src="${pageContext.request.contextPath}/images/btn2.jpg"
type=image name=btnReset
onclick="javascript:adminlogin.reset();"></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div style="margin: 0px auto; width: 936px">
<img src="${pageContext.request.contextPath}/images/body_06.jpg">
</div>
</td>
</tr>
<tr style="height: 30%">
<td>&nbsp;</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>

2.3 home_page.jsp

在项目 hrmssrc->main->webapp 下新建 JSP 页面 home_page.jsp 作为系统的主页面,并添加如下代码:

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>hrms_main</title>
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/default/easyui.css">
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/icon.css">
<script type="text/javascript"
src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.min.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.easyui.min.js"></script>
<script type="text/javascript">
var url;
function addTab(url, text, iconCls) {
var content = "<iframe frameborder=0 scrolling='auto' style='width:100%;height:100%' src='${pageContext.request.contextPath}/views/"
+ url + "'></iframe>";
$("#tabs").tabs("add", {
title : text,
iconCls : iconCls,
closable : true,
content : content
});
}
function openTab(text, url, iconCls) {
if ($("#tabs").tabs("exists", text)) {
$("#tabs").tabs("close", text);
addTab(url, text, iconCls);
$("#tabs").tabs("select", text);
} else {
addTab(url, text, iconCls);
}
}
/* 退出 */
function logout() {
$.messager
.confirm(
"system prompt",
"Do you want to exit?",
function(r) {
if (r) {
window.location.href = "${pageContext.request.contextPath}/admin/logout";
}
});
}
</script>
<body class="easyui-layout">
<div region="north" style="height: 78px; background-color: #ffff">
<table width="100%">
<tr>
<td width="50%"></td>
<td valign="bottom"
style="font-size: 20px; color: #8B8B8B; font-family: '\u6977\u4f53';"
align="right" width="50%"><font size="3">&nbsp;&nbsp;<strong>Current
Admin\uff1a</strong>
</font> <font color="red">${sessionScope.currentAdmin.username}</font></td>
</tr>
</table>
</div>
<div region="center">
<div class="easyui-tabs" fit="true" border="false" id="tabs">
<div title="Home" data-options="iconCls:'icon-home'">
<div align="center" style="padding-top: 50px">
<font color="grey" size="10">Human Affairs Management System</font>
</div>
<div align="center" style="padding-top: 20px;">
<font style="font-size: 20px;">www.shiyanlou.com</font>
</div>
</div>
</div>
</div>
<div region="west" style="width: 200px; height: 500px;"
title="Navigation Menu" split="true">
<div class="easyui-accordion">
<div title="Department Manage"
data-options="selected:true,iconCls:'icon-shujias'"
style="padding: 10px; height: 10px;">
<a href="javascript:openTab(' Department Info','deptManage.jsp')"
class="easyui-linkbutton" data-options="plain:true"
style="width: 150px;"> Department Info</a>
</div> <div title="Position Manage"
data-options="selected:true,iconCls:'icon-schoolceo'"
style="padding: 10px; height: 10px;">
<a href="javascript:openTab(' Position Info','positionManage.jsp')"
class="easyui-linkbutton" data-options="plain:true"
style="width: 150px;"> Position Info</a>
</div> <div title="Employee Manage" data-options="iconCls:'icon-students' "
style="padding: 10px">
<a href="javascript:openTab(' Employee Info','employeeManage.jsp')"
class="easyui-linkbutton" data-options="plain:true"
style="width: 150px;">Employee Info</a>
</div> <div title="Post Manage"
data-options="selected:true,iconCls:'icon-wenzhang'"
style="padding: 10px; height: 10px;">
<a href="javascript:openTab(' Post Info','postManage.jsp')"
class="easyui-linkbutton" data-options="plain:true"
style="width: 150px;"> Post Info</a>
</div> <div title="System Manage" data-options="iconCls:'icon-item'"
style="padding: 10px; border: none;">
<a
href="javascript:openTab(' Admin List','adminManage.jsp','icon-lxr')"
class="easyui-linkbutton"
data-options="plain:true,iconCls:'icon-lxr'" style="width: 150px;">
Admin List</a><a href="javascript:logout()" class="easyui-linkbutton"
data-options="plain:true,iconCls:'icon-exit'" style="width: 150px;">
Exit</a>
</div>
</div>
</div>
</body>
</html>

2.4 postContent.jsp

在项目 hrmssrc->main->webapp 下新建 JSP 页面 postContent.jsp 作为公告内容详情的展示页面,并添加如下代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Post Content</title>
</head>
<body>${requestScope.postContent}
</body>
</html>

2.5 五大功能模块 JSP 页面

在项目 hrmssrc->main->webapp 下新建 Folder views

2.5.1 adminManage.jsp

在项目 hrmssrc->main->webapp->views 下新建 JSP 页面 adminManage.jsp 作为系统管理页面,并添加如下代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/default/easyui.css">
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/icon.css">
<script type="text/javascript"
src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.min.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.easyui.min.js"></script>
<script type="text/javascript">
var url;
/* 根据条件查询管理员 */
function searchAdmin() {
$("#dg").datagrid('load', {
"username" : $("#s_username").val()
});
}
/* 删除管理员,可以是多个 */
function deleteAdmin() {
var selectedRows = $("#dg").datagrid('getSelections');
if (selectedRows.length == 0) {
$.messager.alert("system prompt",
"Please choose the data to delete!");
return;
}
var strIds = [];
for ( var i = 0; i < selectedRows.length; i++) {
strIds.push(selectedRows[i].id);
}
var ids = strIds.join(",");
$.messager
.confirm(
"system prompt",
"Do you want to delete the <font color=red>"
+ selectedRows.length + "</font> data?",
function(r) {
if (r) {
$
.post(
"${pageContext.request.contextPath}/admin/delete",
{
ids : ids
},
function(result) {
if (result.success) {
$.messager
.alert(
"system prompt",
"Delete successful!");
$("#dg").datagrid(
"reload");
} else {
$.messager
.alert(
"system prompt",
"Can't delete superAdmin or current admin!");
}
}, "json");
}
});
} function openAdminAddDialog() {
$("#dlg").dialog("open").dialog("setTitle", "Add new admin");
url = "${pageContext.request.contextPath}/admin/save";
}
/* 保存管理员,根据不同的 url 选择是添加还是修改 */
function saveAdmin() {
$("#fm").form("submit", {
url : url,
onSubmit : function() {
return $(this).form("validate");
},
success : function(result) {
$.messager.alert("system prompt", "Save successful!");
resetValue();
$("#dlg").dialog("close");
$("#dg").datagrid("reload");
}
});
} function openAdminModifyDialog() {
var selectedRows = $("#dg").datagrid('getSelections');
if (selectedRows.length != 1) {
$.messager.alert("system prompt", "Please choose a data to edit!");
return;
}
var row = selectedRows[0];
if (row.id == 1) {
$.messager.alert("system prompt",
"Can't modity superadmin' information!");
return;
}
$("#dlg").dialog("open").dialog("setTitle", "Edit admin information");
$('#fm').form('load', row);
$("#password").val("******");
url = "${pageContext.request.contextPath}/admin/save?id=" + row.id;
} function resetValue() {
$("#username").val("");
$("#password").val("");
} function closeAdminDialog() {
$("#dlg").dialog("close");
resetValue();
}
</script>
</head>
<body style="margin: 1px;">
<table id="dg" title="Admin Manage" class="easyui-datagrid"
fitColumns="true" pagination="true" rownumbers="true"
url="${pageContext.request.contextPath}/admin/list" fit="true"
toolbar="#tb">
<thead>
<tr>
<th field="cb" checkbox="true" align="center"></th>
<th field="id" width="50" align="center">id</th>
<th field="username" width="80" align="center">username</th>
<th field="role_name" width="80" align="center">role_name</th>
</tr>
</thead>
</table>
<div id="tb">
<div>
<a href="javascript:openAdminAddDialog()" class="easyui-linkbutton"
iconCls="icon-add" plain="true">Add</a> <a
href="javascript:openAdminModifyDialog()" class="easyui-linkbutton"
iconCls="icon-edit" plain="true">Modify</a> <a
href="javascript:deleteAdmin()" class="easyui-linkbutton"
iconCls="icon-remove" plain="true">Delete</a>
</div>
<div>
&nbsp;Username:&nbsp;<input type="text" id="s_username" size="20"
onkeydown="if(event.keyCode==13) searchAdmin()" /> <a
href="javascript:searchAdmin()" class="easyui-linkbutton"
iconCls="icon-search" plain="true">Search</a>
</div>
</div> <div id="dlg" class="easyui-dialog"
style="width: 620px; height: 250px; padding: 10px 20px" closed="true"
buttons="#dlg-buttons">
<form id="fm" method="post">
<table cellspacing="8px">
<tr>
<td>Username:</td>
<td><input type="text" id="username" name="username"
class="easyui-validatebox" required="true" />&nbsp;<font
color="red">*</font></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="text" id="password" name="password"
class="easyui-validatebox" required="true" />&nbsp;<font
color="red">*</font></td>
</tr>
</table>
</form>
</div> <div id="dlg-buttons">
<a href="javascript:saveAdmin()" class="easyui-linkbutton"
iconCls="icon-ok">Save</a> <a href="javascript:closeAdminDialog()"
class="easyui-linkbutton" iconCls="icon-cancel">Close</a>
</div>
</body>
</html>

2.5.2 postManage.jsp

在项目 hrmssrc->main->webapp->views 下新建 JSP 页面 postManage.jsp 作为公告管理页面,并添加如下代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>postManage</title>
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/default/easyui.css">
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/icon.css">
<script type="text/javascript"
src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.min.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.easyui.min.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/ueditor/ueditor.config.js"> </script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/ueditor/ueditor.all.min.js"> </script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/common.js"></script>
<script type="text/javascript">
var url;
function ResetEditor() {
UE.getEditor('myEditor', {
initialFrameHeight : 480,
initialFrameWidth : 660,
enableAutoSave : false,
elementPathEnabled : false,
wordCount : false, });
}
/* 根据条件查询公告 */
function searchPost() {
$("#dg").datagrid('load', {
"title" : $("#postTitle").val(),
});
}
/* 删除公告,可以是多个 */
function deletePost() {
var selectedRows = $("#dg").datagrid('getSelections');
if (selectedRows.length == 0) {
$.messager.alert("system prompt", "Please choose a data to edit!");
return;
}
var strIds = [];
for ( var i = 0; i < selectedRows.length; i++) {
strIds.push(selectedRows[i].id);
}
var ids = strIds.join(",");
$.messager
.confirm(
"Please choose a data to edit!",
"Do you want to delete the <font color=red>"
+ selectedRows.length + "</font> data?",
function(r) {
if (r) {
$
.post(
"${pageContext.request.contextPath}/post/delete",
{
ids : ids
},
function(result) {
if (result.success) {
$.messager
.alert(
"system prompt",
"Delete successful!");
$("#dg").datagrid(
"reload");
} else {
$.messager
.alert(
"system prompt",
"Delete error!");
}
}, "json");
}
}); } function openPostAddDialog() {
var html = '<div id="myEditor" name="content"></div>';
$('#editor').append(html);
ResetEditor(editor);
var ue = UE.getEditor('myEditor');
ue.ready(function() {
ue.setContent("");
}); $("#dlg").dialog("open").dialog("setTitle", "Add post");
url = "${pageContext.request.contextPath}/post/save"; }
/* 保存公告,根据不同的 url 选择是添加还是修改 */
function savePost() {
$("#fm").form("submit", {
url : url,
onSubmit : function() {
return $(this).form("validate");
},
success : function(result) {
$.messager.alert("system prompt", "Save successful!");
$("#dlg").dialog("close");
$("#dg").datagrid("reload");
resetValue();
}
});
} function openPostModifyDialog() {
var selectedRows = $("#dg").datagrid('getSelections');
if (selectedRows.length != 1) {
$.messager.alert("system prompt", "Please choose a data to edit!");
return;
}
var row = selectedRows[0];
$("#dlg").dialog("open").dialog("setTitle", "Edit post");
$('#fm').form('load', row);
var html = '<div id="myEditor" name="content"></div>';
$('#editor').append(html);
ResetEditor(editor);
var ue = UE.getEditor('myEditor');
ue.ready(function() {
ue.setContent(row.content);
}); url = "${pageContext.request.contextPath}/post/save?id=" + row.id;
} function formatHref(val, row) {
return "<a href='${pageContext.request.contextPath}/post/getById?id="
+ row.id + "' target='_blank'>Show Content</a>";
} function resetValue() {
$("#title").val("");
$("#container").val("");
ResetEditor();
} function closePostDialog() {
$("#dlg").dialog("close");
resetValue();
}
</script>
</head>
<body style="margin: 1px;" id="ff">
<table id="dg" title="Post Manage" class="easyui-datagrid"
pagination="true" rownumbers="true" fit="true"
data-options="pageSize:10"
url="${pageContext.request.contextPath}/post/list" toolbar="#tb">
<thead data-options="frozen:true">
<tr>
<th field="cb" checkbox="true" align="center"></th>
<th field="id" width="10%" align="center" hidden="true">id</th>
<th field="title" width="300" align="center">title</th>
<th field="date" width="150" align="center">create_date</th>
<th field="admin.username" width="150" align="center">announcer</th>
<th field="content" width="150" align="center"
formatter="formatHref">operation</th>
</tr>
</thead>
</table>
<div id="tb">
<div>
<a href="javascript:openPostAddDialog()" class="easyui-linkbutton"
iconCls="icon-add" plain="true">Add</a> <a
href="javascript:openPostModifyDialog()" class="easyui-linkbutton"
iconCls="icon-edit" plain="true">Modify</a> <a
href="javascript:deletePost()" class="easyui-linkbutton"
iconCls="icon-remove" plain="true">Delete</a>
</div>
<div>
&nbsp;Title:&nbsp;<input type="text" id="postTitle" size="20"
onkeydown="if(event.keyCode==13) searchPost()" />&nbsp; <a
href="javascript:searchPost()" class="easyui-linkbutton"
iconCls="icon-search" plain="true">Search</a>
</div>
</div> <div id="dlg" class="easyui-dialog"
style="width: 850px; height: 555px; padding: 10px 20px; position: relative; z-index: 1000;"
closed="true" buttons="#dlg-buttons">
<form id="fm" method="post">
<table cellspacing="8px">
<tr>
<td>TiTle:</td>
<td><input type="text" id="title" name="title"
class="easyui-validatebox" required="true" />&nbsp;<font
color="red">*</font></td>
</tr>
<tr>
<td>Content:</td>
<td id="editor"></td>
</tr>
</table>
</form>
</div> <div id="dlg-buttons">
<a href="javascript:savePost()" class="easyui-linkbutton"
iconCls="icon-ok">Save</a> <a href="javascript:closePostDialog()"
class="easyui-linkbutton" iconCls="icon-cancel">Close</a>
</div>
</body>
</html>

2.5.3 deptManage.jsp

在项目 hrmssrc->main->webapp->views 下新建 JSP 页面 deptManage.jsp 作为部门管理页面,并添加如下代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/default/easyui.css">
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/icon.css">
<script type="text/javascript"
src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.min.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.easyui.min.js"></script>
<script type="text/javascript">
var url;
/* 根据条件查询部门 */
function searchDept() {
$("#dg").datagrid('load', {
"name" : $("#s_name").val()
});
}
/* 删除部门,可以是多个 */
function deleteDept() {
var selectedRows = $("#dg").datagrid('getSelections');
if (selectedRows.length == 0) {
$.messager.alert("system prompt",
"Please choose the data to delete!");
return;
}
var strIds = [];
for ( var i = 0; i < selectedRows.length; i++) {
strIds.push(selectedRows[i].id);
}
var ids = strIds.join(",");
$.messager
.confirm(
"system prompt",
"Do you want to delete the <font color=red>"
+ selectedRows.length + "</font> data?",
function(r) {
if (r) {
$
.post(
"${pageContext.request.contextPath}/dept/delete",
{
ids : ids
},
function(result) {
if (result.success) {
$.messager
.alert(
"system prompt",
"Delete successful!");
$("#dg").datagrid(
"reload");
} else {
$.messager
.alert(
"system prompt",
"Delete error! The department has employees!");
}
}, "json");
}
});
} function openDeptAddDialog() {
$("#dlg").dialog("open").dialog("setTitle", "Add new department");
url = "${pageContext.request.contextPath}/dept/save";
}
/* 保存部门,根据不同的 url 选择是添加还是修改 */
function saveDept() {
$("#fm").form("submit", {
url : url,
onSubmit : function() {
return $(this).form("validate");
},
success : function(result) {
$.messager.alert("system prompt", "Save successful!");
resetValue();
$("#dlg").dialog("close");
$("#dg").datagrid("reload");
}
});
} function openDeptModifyDialog() {
var selectedRows = $("#dg").datagrid('getSelections');
if (selectedRows.length != 1) {
$.messager.alert("system prompt", "Please choose a data to edit!");
return;
}
var row = selectedRows[0];
$("#dlg").dialog("open").dialog("setTitle",
"Edit department information");
$('#fm').form('load', row);
url = "${pageContext.request.contextPath}/dept/save?id=" + row.id;
} function resetValue() {
$("#name").val("");
$("#description").val("");
} function closeDeptDialog() {
$("#dlg").dialog("close");
resetValue();
}
</script>
</head>
<body style="margin: 1px;">
<table id="dg" title="Department Manage" class="easyui-datagrid"
fitColumns="true" pagination="true" rownumbers="true"
url="${pageContext.request.contextPath}/dept/list" fit="true"
toolbar="#tb">
<thead>
<tr>
<th field="cb" checkbox="true" align="center"></th>
<th field="id" width="50" align="center" hidden="true">id</th>
<th field="name" width="80" align="center">name</th>
<th field="description" width="200" align="center">description</th>
</tr>
</thead>
</table>
<div id="tb">
<div>
<a href="javascript:openDeptAddDialog()" class="easyui-linkbutton"
iconCls="icon-add" plain="true">Add</a> <a
href="javascript:openDeptModifyDialog()" class="easyui-linkbutton"
iconCls="icon-edit" plain="true">Modify</a> <a
href="javascript:deleteDept()" class="easyui-linkbutton"
iconCls="icon-remove" plain="true">Delete</a>
</div>
<div>
&nbsp;Name:&nbsp;<input type="text" id="s_name" size="20"
onkeydown="if(event.keyCode==13) searchDept()" /> <a
href="javascript:searchDept()" class="easyui-linkbutton"
iconCls="icon-search" plain="true">Search</a>
</div>
</div> <div id="dlg" class="easyui-dialog"
style="width: 450px; height: 250px; padding: 10px 20px" closed="true"
buttons="#dlg-buttons">
<form id="fm" method="post">
<table cellspacing="8px">
<tr>
<td>Name:</td>
<td><input type="text" id="name" name="name"
style="width: 180px" class="easyui-validatebox" required="true" />&nbsp;<font
color="red">*</font></td>
</tr>
<tr>
<td>Description:</td>
<td><textarea id="description" name="description"
style="width: 180px; height: 80px;" class="easyui-validatebox"
required="true"></textarea>&nbsp;<font color="red">*</font></td>
</tr>
</table>
</form>
</div> <div id="dlg-buttons">
<a href="javascript:saveDept()" class="easyui-linkbutton"
iconCls="icon-ok">Save</a> <a href="javascript:closeDeptDialog()"
class="easyui-linkbutton" iconCls="icon-cancel">Close</a>
</div>
</body>
</html>

2.5.4 positionManage.jsp

在项目 hrmssrc->main->webapp->views 下新建 JSP 页面 positionManage.jsp 作为职位管理页面,并添加如下代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/default/easyui.css">
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/icon.css">
<script type="text/javascript"
src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.min.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.easyui.min.js"></script>
<script type="text/javascript">
var url;
/* 根据条件查询职位 */
function searchPosition() {
$("#dg").datagrid('load', {
"name" : $("#s_name").val()
});
}
/* 删除职位,可以是多个 */
function deletePosition() {
var selectedRows = $("#dg").datagrid('getSelections');
if (selectedRows.length == 0) {
$.messager.alert("system prompt",
"Please choose the data to delete!");
return;
}
var strIds = [];
for ( var i = 0; i < selectedRows.length; i++) {
strIds.push(selectedRows[i].id);
}
var ids = strIds.join(",");
$.messager
.confirm(
"system prompt",
"Do you want to delete the <font color=red>"
+ selectedRows.length + "</font> data?",
function(r) {
if (r) {
$
.post(
"${pageContext.request.contextPath}/position/delete",
{
ids : ids
},
function(result) {
if (result.success) {
$.messager
.alert(
"system prompt",
"Delete successful!");
$("#dg").datagrid(
"reload");
} else {
$.messager
.alert(
"system prompt",
"Delete error! The position has employees!");
}
}, "json");
}
});
} function openPositionAddDialog() {
$("#dlg").dialog("open").dialog("setTitle", "Add new position");
url = "${pageContext.request.contextPath}/position/save";
}
/* 保存职位,根据不同的 url 选择是添加还是修改 */
function savePosition() {
$("#fm").form("submit", {
url : url,
onSubmit : function() {
return $(this).form("validate");
},
success : function(result) {
$.messager.alert("system prompt", "Save successful!");
resetValue();
$("#dlg").dialog("close");
$("#dg").datagrid("reload");
}
});
} function openPositionModifyDialog() {
var selectedRows = $("#dg").datagrid('getSelections');
if (selectedRows.length != 1) {
$.messager.alert("system prompt", "Please choose a data to edit!");
return;
}
var row = selectedRows[0];
$("#dlg").dialog("open")
.dialog("setTitle", "Edit position information");
$('#fm').form('load', row);
url = "${pageContext.request.contextPath}/position/save?id=" + row.id;
} function resetValue() {
$("#name").val("");
$("#description").val("");
} function closePositionDialog() {
$("#dlg").dialog("close");
resetValue();
}
</script>
</head>
<body style="margin: 1px;">
<table id="dg" title="Position Manage" class="easyui-datagrid"
fitColumns="true" pagination="true" rownumbers="true"
url="${pageContext.request.contextPath}/position/list" fit="true"
toolbar="#tb">
<thead>
<tr>
<th field="cb" checkbox="true" align="center"></th>
<th field="id" width="50" align="center" hidden="true">id</th>
<th field="name" width="80" align="center">name</th>
<th field="description" width="200" align="center">description</th>
</tr>
</thead>
</table>
<div id="tb">
<div>
<a href="javascript:openPositionAddDialog()"
class="easyui-linkbutton" iconCls="icon-add" plain="true">Add</a> <a
href="javascript:openPositionModifyDialog()"
class="easyui-linkbutton" iconCls="icon-edit" plain="true">Modify</a>
<a href="javascript:deletePosition()" class="easyui-linkbutton"
iconCls="icon-remove" plain="true">Delete</a>
</div>
<div>
&nbsp;Name:&nbsp;<input type="text" id="s_name" size="20"
onkeydown="if(event.keyCode==13) searchPosition()" /> <a
href="javascript:searchPosition()" class="easyui-linkbutton"
iconCls="icon-search" plain="true">Search</a>
</div>
</div> <div id="dlg" class="easyui-dialog"
style="width: 450px; height: 250px; padding: 10px 20px" closed="true"
buttons="#dlg-buttons">
<form id="fm" method="post">
<table cellspacing="8px">
<tr>
<td>Name:</td>
<td><input type="text" id="name" name="name"
style="width: 180px" class="easyui-validatebox" required="true" />&nbsp;<font
color="red">*</font></td>
</tr>
<tr>
<td>Description:</td>
<td><textarea id="description" name="description"
style="width: 180px; height: 80px;" class="easyui-validatebox"
required="true"></textarea>&nbsp;<font color="red">*</font></td>
</tr>
</table>
</form>
</div> <div id="dlg-buttons">
<a href="javascript:savePosition()" class="easyui-linkbutton"
iconCls="icon-ok">Save</a> <a href="javascript:closePositionDialog()"
class="easyui-linkbutton" iconCls="icon-cancel">Close</a>
</div>
</body>
</html>

2.5.5 employeeManage.jsp

在项目 hrmssrc->main->webapp->views 下新建 JSP 页面 employeeManage.jsp 作为员工管理页面,并添加如下代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/default/easyui.css">
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/icon.css">
<script type="text/javascript"
src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.min.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.easyui.min.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/locale/easyui-lang-zh_CN.js"></script>
<script type="text/javascript">
var url;
var firstDepartmentId;
var firstDepartmentName;
var firstPositionId;
var firstPositionName;
var submitDeptId;
var submitPosId;
var updateFlag;
/* 根据条件查询员工 */
function searchEmpl() {
$("#dg").datagrid('load', {
"id" : $("#e_id").val(),
"name" : $("#e_name").val(),
"department.name" : $("#e_dept").val(),
"position.name" : $("#e_position").val(),
"sex" : $("#e_sex").val()
});
}
/* 删除员工,可以是多个 */
function deleteEmpl() {
var selectedRows = $("#dg").datagrid('getSelections');
if (selectedRows.length == 0) {
$.messager.alert("system prompt",
"Please choose the data to delete!");
return;
}
var strIds = [];
for ( var i = 0; i < selectedRows.length; i++) {
strIds.push(selectedRows[i].id);
}
var ids = strIds.join(",");
$.messager
.confirm(
"system prompt",
"Do you want to delete the <font color=red>"
+ selectedRows.length + "</font> data?",
function(r) {
if (r) {
$
.post(
"${pageContext.request.contextPath}/empl/delete",
{
ids : ids
},
function(result) {
if (result.success) {
$.messager
.alert(
"system prompt",
"Delete successful!");
$("#dg").datagrid(
"reload");
} else {
$.messager
.alert(
"system prompt",
"Delete error!");
}
}, "json");
}
});
} function openEmplAddDialog() {
$("#dlg").dialog("open").dialog("setTitle", "Add new employee");
$("#id").attr("readOnly", false);
url = "${pageContext.request.contextPath}/empl/save";
updateFlag = "no";
}
/* 保存员工,根据不同的 url 选择是添加还是修改 */
function saveEmpl() {
submitDeptId = $("#dept").combobox('getValue');
submitPosId = $("#pos").combobox('getValue');
$("#fm")
.form(
"submit",
{
url : url + "?dept_id= " + submitDeptId
+ "&pos_id= " + submitPosId
+ "&updateFlag=" + updateFlag,
onSubmit : function() {
var msg = "";
// 进行输入信息的校验,非空,id 和 phone 的格式
if (!$(this).form("validate")) {
msg = "all information can't be empty!";
} else if (!/^[0-9]+$/.test($("#id").val())) {
msg = "Please input number type for id!";
} else if (!/^1[3|5|7|8]\d{9}$/
.test($("#phone").val())) {
msg = "Please input right phone!";
}
if (msg != "") {
$.messager.alert("system prompt", msg);
return false;
} else {
return true;
}
},
success : function(data) {
var result = eval('(' + data + ')');
if (result.success) {
$.messager.alert("system prompt",
"Save successful!");
resetValue();
$("#dlg").dialog("close");
$("#dg").datagrid("reload");
} else {
$.messager
.alert("system prompt",
"The id already exists,please input a new id!");
}
}
});
} function openEmplModifyDialog() {
var selectedRows = $("#dg").datagrid('getSelections');
if (selectedRows.length != 1) {
$.messager.alert("system prompt", "Please choose a data to edit!");
return;
}
var row = selectedRows[0];
$("#dlg").dialog("open")
.dialog("setTitle", "Edit employee information");
$("#id").attr("readOnly", true);
$('#fm').form('load', row);
$('#birthday').datebox('setValue', row.birthday);
$('#dept').combobox('setValue', row.department.id);
$('#dept').combobox('setText', row.department.name);
$('#pos').combobox('setValue', row.position.id);
$('#pos').combobox('setText', row.position.name);
url = "${pageContext.request.contextPath}/empl/save";
updateFlag = "yes";
} function resetValue() {
$("#id").val("");
$("#id").attr("readOnly", false);
$("#name").val("");
$('#sex').combobox('setValue', "male");
$("#phone").val("");
$("#email").val("");
$("#address").val("");
$('#education').combobox('setValue', "Bachelor");
$('#birthday').datebox('setValue', formatterDate(new Date()));
$('#dept').combobox('setValue', firstDepartmentId);
$('#dept').combobox('setText', firstDepartmentName);
$('#pos').combobox('setValue', firstPositionId);
$('#pos').combobox('setText', firstPositionName);
} function closeEmplDialog() {
$("#dlg").dialog("close");
resetValue();
}
/* 为部门的 combobox 设默认值 */
$(document).ready(function() {
$.ajax({
url : '${pageContext.request.contextPath}/dept/getcombobox',
type : 'post',
success : function(data) {
if (data) {
$('#dept').combobox('setValue', data[0].id);
$('#dept').combobox('setText', data[0].name);
firstDepartmentId = data[0].id;
firstDepartmentName = data[0].name;
}
}
});
});
/* 为职位的 combobox 设默认值 */
$(document).ready(function() {
$.ajax({
url : '${pageContext.request.contextPath}/position/getcombobox',
type : 'post',
success : function(data) {
if (data) {
$('#pos').combobox('setValue', data[0].id);
$('#pos').combobox('setText', data[0].name);
firstPositionId = data[0].id;
firstPositionName = data[0].name;
}
}
});
}); /* 设置 datebox 默认值为指定格式的当前日期 */
formatterDate = function(date) {
var day = date.getDate() > 9 ? date.getDate() : "0" + date.getDate();
var month = (date.getMonth() + 1) > 9 ? (date.getMonth() + 1) : "0"
+ (date.getMonth() + 1);
return date.getFullYear() + '-' + month + '-' + day;
}; window.onload = function() {
$('#birthday').datebox('setValue', formatterDate(new Date()));
};
</script>
</head>
<body style="margin: 1px;">
<table id="dg" title="Employee Manage" class="easyui-datagrid"
fitColumns="true" pagination="true" rownumbers="true"
url="${pageContext.request.contextPath}/empl/list" fit="true"
toolbar="#tb">
<thead>
<tr>
<th field="cb" checkbox="true" align="center"></th>
<th field="id" width="50" align="center">id</th>
<th field="name" width="80" align="center">name</th>
<th field="sex" width="50" align="center">sex</th>
<th field="phone" width="80" align="center">phone</th>
<th field="email" width="100" align="center">email</th>
<th field="address" width="80" align="center">address</th>
<th field="education" width="60" align="center">education</th>
<th field="birthday" width="80" align="center">birthday</th>
<th field="department.id" width="50" align="center" hidden="true">dept_id</th>
<th field="department.name" width="80" align="center">department</th>
<th field="position.id" width="50" align="center" hidden="true">pos_id</th>
<th field="position.name" width="80" align="center">position</th>
</tr>
</thead>
</table>
<div id="tb">
<div>
<a href="javascript:openEmplAddDialog()" class="easyui-linkbutton"
iconCls="icon-add" plain="true">Add</a> <a
href="javascript:openEmplModifyDialog()" class="easyui-linkbutton"
iconCls="icon-edit" plain="true">Modify</a> <a
href="javascript:deleteEmpl()" class="easyui-linkbutton"
iconCls="icon-remove" plain="true">Delete</a>
</div>
<div>
<table>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID:&nbsp;
<input type="text" id="e_id" size="20"
onkeydown="if(event.keyCode==13) searchEmpl()" />
</td>
<td>&nbsp;Name:&nbsp; <input type="text" id="e_name" size="20"
onkeydown="if(event.keyCode==13) searchEmpl()" />
</td>
<td>&nbsp;Department:&nbsp; <input type="text" id="e_dept"
size="20" onkeydown="if(event.keyCode==13) searchEmpl()" />
</td>
</tr>
<tr>
<td>&nbsp;Position:&nbsp;<input type="text" id="e_position"
size="20" onkeydown="if(event.keyCode==13) searchEmpl()" />
</td>
<td>&nbsp;&nbsp;&nbsp;&nbsp;Sex:&nbsp; <input type="text"
id="e_sex" size="20"
onkeydown="if(event.keyCode==13) searchEmpl()" />
</td>
<td>&nbsp;&nbsp;&nbsp;<a href="javascript:searchEmpl()"
class="easyui-linkbutton" iconCls="icon-search" plain="true">Search</a>
</td>
</tr>
</table>
</div>
</div> <div id="dlg" class="easyui-dialog"
style="width: 500px; height: 550px; padding: 10px 20px" closed="true"
buttons="#dlg-buttons">
<form id="fm" method="post">
<table cellspacing="8px">
<tr>
<td>ID:</td>
<td><input type="text" id="id" name="id" style="width: 210px"
class="easyui-validatebox"
data-options="required:true,validType:'digits'" />&nbsp;<font
color="red">*</font></td>
</tr>
<tr>
<td>Name:</td>
<td><input type="text" id="name" name="name"
style="width: 210px" class="easyui-validatebox" required="true" />&nbsp;<font
color="red">*</font></td>
</tr>
<tr>
<td>Sex:</td>
<td><select id="sex" class="easyui-combobox" name="sex"
style="width: 220px; heigth: 60px"
data-options="editable:false,panelHeight:'auto'">
<option>male</option>
<option>female</option>
</select></td>
</tr>
<tr>
<td>Phone:</td>
<td><input type="text" id="phone" name="phone"
style="width: 210px" class="easyui-validatebox" required="true" />&nbsp;<font
color="red">*</font></td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" id="email" name="email"
style="width: 210px" class="easyui-validatebox"
data-options="required:true,validType:'email'" />&nbsp;<font
color="red">*</font></td>
</tr>
<tr>
<td>Address:</td>
<td><textarea id="address" name="address"
style="width: 210px; height: 50px" class="easyui-validatebox"
required="true"></textarea>&nbsp;<font color="red">*</font></td>
</tr>
<tr>
<td>Education:</td>
<td><select id="education" class="easyui-combobox"
name="education" style="width: 220px; heigth: 60px"
data-options="editable:false,panelHeight:'auto'">
<option>Bachelor</option>
<option>Master</option>
<option>Doctor</option>
</select></td>
</tr>
<tr>
<td>Birthday:</td>
<td><input id="birthday" name="birthday" type="text"
class="easyui-datebox" data-options="editable:false"
required="required" style="width: 220px"></td>
</tr>
<tr>
<td>Department:</td>
<td><select class="easyui-combobox" id="dept" name="dept"
data-options="url:'${pageContext.request.contextPath}/dept/getcombobox',
method:'post',
valueField:'id',
textField:'name',
editable:false,
panelHeight:'auto'"
style="width: 220px"></select></td>
</tr>
<tr>
<td>Position:</td>
<td><select class="easyui-combobox" id="pos" name="pos"
data-options="url:'${pageContext.request.contextPath}/position/getcombobox',
method:'post',
valueField:'id',
textField:'name',
editable:false,
panelHeight:'auto'"
style="width: 220px"></select></td>
</tr> </table>
</form>
</div> <div id="dlg-buttons">
<a href="javascript:saveEmpl()" class="easyui-linkbutton"
iconCls="icon-ok">Save</a> <a href="javascript:closeEmplDialog()"
class="easyui-linkbutton" iconCls="icon-cancel">Close</a>
</div>
</body>
</html>

三、实验总结

到这里我们就完成了表现层 JSP 代码的实现,下一节我们将完成拦截器和 Spring MVC 框架的整合。

表现层 JSP 页面实现的更多相关文章

  1. 表现层(jsp)、持久层(类似dao)、业务层(逻辑层、service层)、模型(javabean)、控制层(action)

    转自:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持久层(Hibernate)之间的松 ...

  2. java 表现层:jsp、freemarker、velocity

    在java领域,表现层技术主要有三种:jsp.freemarker.velocity. jsp是大家最熟悉的技术 优点: 1.功能强大,可以写java代码 2.支持jsp标签(jsp tag) 3.支 ...

  3. CGI servlet Applet Scriptlet Scriptlet JSP data layer(数据层),business layer(业务层), presentation layer(表现层)

    https://en.wikipedia.org/wiki/Common_Gateway_Interface In computing, Common Gateway Interface (CGI) ...

  4. SpringMVC的controller层接收来自jsp页面通过<a href="/user/userUpdateInfo/>的中文乱码问题

    这种情况是,jsp页面的中文正常显示,数据的中文也是正常显示,但是在Controller层接收到的中文是乱码,如下图所示: 解决方法:在Controller层对前台传递的中文乱码进行处理,将它转换成u ...

  5. 系统管理模块_部门管理_改进_抽取添加与修改JSP页面中的公共代码_在显示层抽取BaseAction_合并Service层与Dao层

    系统管理模块_部门管理_改进1:抽取添加与修改JSP页面中的公共代码 commons.jspf <%@ page language="java" import="j ...

  6. 表现层(jsp)、持久层(dao)、业务层(逻辑层、service)

    转自:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持久层(Hibernate)之间的松 ...

  7. Spring MVC控制层传递对象后在JSP页面中的取值方法

    List<Order> orders = new ArrayList<Order>(); for (int i = 0; i < 3; i++) { Order t = ...

  8. 关于ajax的controller层返回jsp页面多个list

    @RequestMapping(value ="findFansChangeRate") @ResponseBody public AjaxJson findFansChangeR ...

  9. 将图片至于jsp页面上(层)

    <div style="position: relative"> <span style="position: relative; top: 1px; ...

随机推荐

  1. LA 3790 Overlapping Squares DFS

    题意: 给出一个字符矩阵,问能否是不超过6个2×2的正方形组成的. 分析: 每次找一个最表面的正方形然后DFS就好了. 一个正方形被移开后,用一个特殊符号标记上,下次再匹配的时候就直接忽略这些位置. ...

  2. bat 文件读取乱码问题

    使用 for 循环 type file1.txt > file2.txt 文件读取后可能会出现乱码,需要在 bat 文件中设置 chcp 表示将批处理设置为 utf-8 编码,这样在生成文件和读 ...

  3. Leetcode 454.四数相加II

    四数相加II 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 为了使问题简单 ...

  4. PHP允许AJAX跨域请求的两种方法

    * 一. 服务端设置 header 头允许AJAX跨域 ** 代码如下: // 允许 ityangs.net 发起的跨域请求 header("Access-Control-Allow-Ori ...

  5. 设计模式(二 & 三)工厂模式:1-简单工厂模式

    模拟场景: 需要构造一个运算器(Operation),分别负责加减乘除的运算功能. 思想: 这里需要构造四个 Operation,可以使用 Factory 去统一创建这四个对象. 所需要构造的对象是运 ...

  6. 刷题总结——拆网线(noip模拟 贪心)

    题目: 给定一颗树··在保证有k个点与其它点连接的情况下问最少保留多少条边···· 树的节点树n和k均小于100000: 题解: 很容易看出来我们要尽量保留那种一条边连两个节点的情况···· 然后考试 ...

  7. js中的clientHeight和offsetHeight的区别如

    如图所示:

  8. 谈谈自己对REST、SOA、SOAP、RPC、ICE、ESB、BPM知识汇总及理解(转载)

    相关参考文章: 谈谈自己对REST.SOA.SOAP.RPC.ICE.ESB.BPM知识汇总及理解 微服务SOA架构与RPC远程过程调用 SOA和微服务架构的区别 SOA: 维基百科解释:SOA:面向 ...

  9. select * from 为什么效率低?

    sql优化有很重要的一项叫做列裁剪(column pruning).如果不考虑索引,sql的执行算法大概分为sort-base和hash-base,不论是哪种,多出来的列都会带来很多无用的计算. “* ...

  10. *NOI热身赛C. 小x的城池

    码农题gun.