public int insertUser(Users user) {
Users users = userDao.selectUserByName(user.getUsername());
if (users != null) {
throw new RuntimeException("用户名已存在");
}
String password = MD5Tools.MD5(user.getPassword());
user.setPassword(password);
user.setCreatetime(new Date());
String positionId = user.getPositionId();
List<Map> maps = JSON.parseArray(positionId, Map.class);
StringBuilder sb =new StringBuilder();
for(Map map: maps){
Map map1 = userDao.selectPositionNameById(map);
sb.append(map1.get("dname"));
sb.append(":");
sb.append(map1.get("cname"));
sb.append(",");
}
user.setPositionId(sb.substring(0,sb.length()-1));
userDao.insertUser(user);
return user.getId();
}前端传了[{"pId",23},{"id",24,{"pId",34,"id",12}]名为positionId和一些其他参数的对象过来,.
data: {positionId:params.positionId,name:params.name,username:params.username,password:params.password,birthday:params.birthday,sex:params.sex,content:params.content},
后端怎么接受呢。对于我菜鸟一脸懵,摸索了一下,在Control里面我们可以用字符串或数组来接收。如果是字符串来接收,直接接受一个实体对象
public String add(Users params) {}
如果说用数组来接受,就
public String add(Users params,@RequestParam ("strings") String[] strings){}然后用','接收。但是实体类里面的对positionId的get,set方法依然返回各String,因为数据库就不能存储数组。
先放出我的Seviceimpl类里面的插入数组方法,因为我对json数据的处理现在前段传数据到后端来处理了。
public int insertUser(Users user) {
Users users = userDao.selectUserByName(user.getUsername());
if (users != null) {
throw new RuntimeException("用户名已存在");
}
String password = MD5Tools.MD5(user.getPassword());
user.setPassword(password);
user.setCreatetime(new Date());
String positionId = user.getPositionId();
List<Map> maps = JSON.parseArray(positionId, Map.class);
StringBuilder sb =new StringBuilder();
for(Map map: maps){
Map map1 = userDao.selectPositionNameById(map);
sb.append(map1.get("dname"));
sb.append(":");
sb.append(map1.get("cname"));
sb.append(",");
}
user.setPositionId(sb.substring(0,sb.length()-1));
userDao.insertUser(user);
return user.getId();
}
这里先想好我要以什么格式来显示多个(部门,职位)的集合。这里我们显示为 部门:职位,部门:职位的格式。在插入数据之前获取position_id,用get方法。
<select id="selectPositionNameById" parameterType="map" resultType="map">
select d.department_name dname,c.position_name cname from department d,com_position c
where d.id = #{pId} and c.id=#{id} limit 1
</select>上面是我的mybaties语句,注意要两张表的要显示的相同名字起别名
Dao
public Map selectPositionNameById(Map<String,Object> map);
输入参数是一个map。其实都不要怎么麻烦,直接输入参数一个string就可以了。
其实对于这个得到个String,然后他又转为一个List<map>,还是有很多疑惑。为什么转为map,它获取到的就是一个json数组索引大小的list了呢。原因是[{"pId",23},{"id",24,{"pId",34,"id",12}]是json格式的数据。这个JSON.parseArray(,)可以直接json格式的字符串转为数组格式,用list接收。然后这个for(Map map: maps){}就可以循环的拼接出多个显示为 部门名:职位名,部门名:职位名 的格式。然后下面这个拼接字符串我就不知道是什么鬼了。大神说是用来去除最后一个“,”。后来想想就是这样的。在后端解析json数据就完成了
二、我现在要在前端传部门名以及他对应的职位名
前端是zTree插件,用来显示部门名和职位名构成的树的。我要传子节点和他对应的父节点,我的程序思维不足,就在纠结怎么传部门名和对应的职位名,就没想到过这个就是传他的子节点与父节点的名字。一般插件都会有获取父节点的函数的。查看zTree的文档,得到此函数。下面放上我的前端整个界面
<%@ page contentType="text/html; charset=utf-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>人力资源管理系统</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css ">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/demo.css" type="text/css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="${pageContext.request.contextPath}/Js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/Js/jquery.ztree.core.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/Js/jquery.ztree.excheck.js"></script>
<%--<script type="text/javascript" src="${pageContext.request.contextPath}/Js/jquery.js"></script>--%>
<%--<script type="text/javascript" src="${pageContext.request.contextPath}/Js/typem.js"></script>--%>
<script type="text/javascript">
window.onload = function () {
var talentSex = $("#talentSex").val();
$("input[name='sex']").each(function (index, element) {
if ($(this).val() == talentSex) {
$(this).prop("checked", true);
}
});
document.getElementById("username").onblur = function () {
var name = $("#username").val();
var filter = /^[0-9A-Za-z.@-_]{6,16}$/;
var a = "1";
$.ajax({
type: 'POST',
url: '${pageContext.request.contextPath}/users/verifyName?name=' + name,
contentType: "application/json; charset=utf-8",
//data : {"name":name},
dataType: 'json',
success: function (data) {
if (data.code == "000001") {
console.info(data.msg)
a = data.msg;
if (filter.test(name)) {
document.getElementById("msg").innerHTML = a + ',格式正确';
}
else {
document.getElementById("msg").innerHTML = '应为数字 字符 . @ - _ 字符组成 6到16个字符';
return;
}
// document.getElementById("msg").innerHTML=data.msg;
} else if (data.code == "000002") {
a = data.msg;
//document.getElementById("msg").innerHTML=data.msg;
}
}
});
}
}
</script>
<script type="text/javascript">
function formsubmit() {
var params = {};
var name = $("#username").val();
var rel_name = $("#name").val();
var password = $("#password").val();
var birthday = $("#birthday").val();//获取值
var sex = $('input:radio:checked').val();
var content = $("#content").val();
var position = $('#citySel').val();
params.name = rel_name;
params.username = name;
params.password = password;
params.birthday = birthday;
params.sex = sex;
params.content = content;
params.positionId = position;
if (name == null || "" == name) {
alert("用户名不能为空");
return false;
}
if (rel_name == null || "" == rel_name) {
alert("姓名不能为空");
return;
}
if ($("#msg").text() == "用户名不可用") {
return;
}
if (password == null || "" == password) {
alert("密码不能为空");
return;
}
if (birthday == null || "" == birthday) {
alert("出生日期不能为空");
return;
}
//console.info(JSON.stringify($('#userForm').serialize()));
$.ajax({
type: 'POST',
url: '${pageContext.request.contextPath}/users/addUser',
data: {positionId:params.positionId,name:params.name,username:params.username,password:params.password,birthday:params.birthday,sex:params.sex,content:params.content},
//data:JSON.stringify(params),
dataType: 'json',
error: function (data) {
alert("请求失败,网络异常")
},
success: function (data) {
if (data.code == "000000") {
alert(data.msg);
} else {
alert(data.msg);
}
}
});
}
</script>
<script type="text/javascript">
<!--
var zNode;
var setting = {
check: {
enable: true,
chkboxType: {"Y": "", "N": ""}
},
view: {
dblClickExpand: false
},
data: {
simpleData: {
enable: true
}
},
callback: {
beforeClick: beforeClick,
onCheck: onCheck
}
};
function getTree() {
$.post("/hrm/users/assignjob", function (data) {
zNode = data.data;
for (var i = 0; i < zNode.length; i++) {
if (zNode[i].isParent == 1) {
zNode[i].open = true;
zNode[i].nocheck = true;
}
}
$.fn.zTree.init($("#treeDemo"), setting, zNode);
})
}
function beforeClick(treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
zTree.checkNode(treeNode, !treeNode.checked, null, true);
return false;
}
function onCheck(e, treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
nodes = zTree.getCheckedNodes(true),
v = "";
// vs = [];
/*va = "";*/
for (var i = 0, l = nodes.length; i < l; i++) {
v +=nodes[i].getParentNode().name+":"+ nodes[i].name + ",";
// var c={};//传入一个对象
//// c.pId=nodes[i].pId;
//// c.id=nodes[i].id+100000000;
// vs.push(c);
}
if (v.length > 0) v = v.substring(0, v.length - 1);
var cityObj = $("#citySel");
cityObj.attr("value", v);
/*if (vs.length > 0) v = vs.substring(0, v.length - 1);*/
var cityObj2 = $("#assignId2");
// cityObj2.attr("value", JSON.stringify(vs));
}
function showMenu() {
var cityObj = $("#citySel");
var cityOffset = $("#citySel").offset();
$("#menuContent").css({
left: cityOffset.left + "px",
top: cityOffset.top + cityObj.outerHeight() + "px"
}).slideDown("fast");
$("body").bind("mousedown", onBodyDown);
}
function hideMenu() {
$("#menuContent").fadeOut("fast");
$("body").unbind("mousedown", onBodyDown);
}
function onBodyDown(event) {
if (!(event.target.id == "menuBtn" || event.target.id == "citySel" || event.target.id == "menuContent" || $(event.target).parents("#menuContent").length > 0)) {
hideMenu();
}
}
$(document).ready(function () {
getTree();
});
//-->
</script>
<style type="text/css">
<!--
.atten {
font-size: 12px;
font-weight: normal;
color: #F00;
}
-->
</style>
</head>
<body class="ContentBody">
<form id="userForm">
<div class="MainDiv">
<table width="99%" border="0" cellpadding="0" cellspacing="0" class="CContent">
<tr>
<th class="tablestyle_title">人员信息录入</th>
</tr>
<tr>
<td class="CPanel">
<table width="90%" border="0" cellpadding="0" cellspacing="0" style="width:80%" align="center">
<tr>
<td align="left">
<%--<input type="submit"value="保存" class="button"/> --%>
</td>
</tr>
<TR>
<TD width="100%">
<fieldset style="height:100%;">
<legend>人员信息</legend>
<table width="100%" border="0" cellpadding="2" cellspacing="1" style="width:100%">
<tr>
<td nowrap align="right" width="9%">用户名:</td>
<td width="36%">
<input name="username" type="text" class="input" id="username"/>
<span class="red">*</span> <span id="msg"></span></td>
<td nowrap align="right" width="9%">真实姓名:</td>
<td width="36%">
<input name="name" type="text" class="input" value="${name}" id="name"/>
<span class="red">*</span>
</td>
</tr>
<tr>
<td width="12%">
<div align="right">登陆密码:</div>
</td>
<td width="43%">
<input name="password" type="password" class="input" id="password"/>
<span class="red">*</span></td>
<td>
<div align="right"><label for="birthday">出生日期:</label></div>
</td>
<td>
<input name="birthday" TYPE="date" value="<fmt:formatDate value="${birthday }"
pattern="yyyy-MM-dd"/>" class="input"
id="birthday"/>
<span class="red">*</span></td>
<%--<input name="birthday" id="birth
day" type="text" />--%>
</td>
</tr>
<tr>
<td width="12%">
<div align="right">部门及职位:</div>
</td>
<td width="43%">
<input id="citySel" type="text" readonly style="width:120px;"
onclick="showMenu();"/>
<a id="menuBtn" href="#" onclick="showMenu(); return false;">select</a>
<span class="red">*</span></td>
<input id="assignId2" name="positionId" type="hidden" value="">
<td nowrap align="right" width="9%">性别:</td>
<td>
<input id="talentSex" type="hidden" value="${sex}"/>
<input name="sex" type="radio" value="1"> 男
<input name="sex" type="radio" value="0" checked>女
</td>
</tr>
<tr>
<%--<td nowrap align="right">是否管理员:</td>--%>
<%--<td>--%>
<%--<input type="checkbox">--%>
<%--<input type="hidden" name="isadmin" id="isadmin"></td>--%>
<td> </td>
<td> </td>
</tr>
<tr>
<td nowrap align="right">人员简介:</td>
<td colspan="3">
<textarea name="content" cols="100" rows="6" class="input"
id="content"></textarea></td>
</tr>
</table>
<br/>
</fieldset>
</TD>
</TR>
</TABLE>
</td>
</tr>
<TR>
<TD colspan="2" align="center" height="50px">
<%--<button onclick="submit()">保存</button>--%>
<input name="提交" type="button" class="button" value="保存" onclick="formsubmit()">
<input name="重置" type="reset" class="button" value="重置"/>
</TD>
</TR>
</TABLE>
</div>
<div id="menuContent" class="menuContent" style="display:none; position: absolute;">
<ul id="treeDemo" class="ztree" style="margin-top:0; width:180px; height: 300px;"></ul>
</div>
</form>
</body>
</html>
下面我在放出添加后的用户列表查询语句。
<!--where代表查询所有-->
<select id="selectAllUser" resultMap="users" parameterType="map">
select id,job_id,username,name,password,sex,birthday,createtime,position_id,
CASE WHEN (length(content) <=5) THEN content ELSE CONCAT(left(content,5),'……') END
as content from users where 1=1
<trim>
<if test="username != null">
and username like concat(concat('%',#{username}),'%')
</if>
<if test="sort ==1 and starTime != null">
and createtime > #{starTime}
</if>
<if test="sort ==1 and endTime != null">
and createtime < #{endTime}
</if>
<if test="sort ==2 and starTime != null">
and birthday > #{starTime}
</if>
<if test="sort ==2 and endTime != null">
and birthday < #{endTime}
</if>
<if test="pageSize != null and pageNum != null">
order by createtime DESC limit #{pageNum} ,#{pageSize}
</if>
</trim>
</select>注意那个order by语句是放着where语句后面,也就是</trim>下面,如果有分页就放着分页语句前面就可以了。
3676

被折叠的 条评论
为什么被折叠?



