springmvc数据绑定笔记
1.单个参数绑定:@RequestParam(“参数”)
@ResponseBody
@RequestMapping("/selectOneUseByEmail")
//2.传邮箱:单个查找用户
//项目发布后,访问地址:http://localhost:8888/项目名称/selectOneUseByEmail? userEmail =你要查找的邮箱
public UserselectOneUseByEmail(@RequestParam("userEmail") String userEmail){
System.out.println("邮箱是:"+userEmail);
Useruser=userService.selectOneUseByEmail(userEmail);
System.out.println(user);
return user;//单个用户的信息
}
2.对象数据绑定 @ModelAttribute("对象")
@ResponseBody
@RequestMapping("/addUser")
//项目发布后,访问地址:http://localhost:8888/项目名称/addUser? user.name=小明&user.age=16
public boolean addUser(@ModelAttribute("user") User user) {
boolean flag=userService.addUser(user);
return flag;
}
3.List对象数据绑定
原代码如下,这时候需要做出修改,才能正确传参。
@ResponseBody
@RequestMapping("/deleteAllUsers")
//9.删除所有用户
publicboolean deleteAllUsers(List<User> userlist) {
boolean flag=userService.deleteAllUsers(usersList.getUsersList());
return flag;
}
修改:
(1)首先,创建一个绑定数据的类,用来绑定list
package com.hmy.ssh.controller.UserForm;
import java.util.List;
import com.hmy.ssh.bean.User;
public classUserListForm {
private List<User> usersList;
public List<User>getUsersList() {
return usersList;
}
public voidsetUsersList(List<User> usersList) {
this.usersList = usersList;
}
@Override
public String toString() {//记得重写方法
return "UserListForm [usersList=" + usersList+ "]";
}
}
(2)可以controller层中的参数
//项目发布后,访问地址:http://localhost:8888/项目名称//deleteAllUsers? user[0].name=小明&user[0].age=16
后会删除
@ResponseBody
@RequestMapping("/deleteAllUsers")
//9.删除所有用户
// publicboolean deleteAllUsers(List<User> userlist) {
public boolean deleteAllUsers(UserListForm usersList) {
boolean flag=userService.deleteAllUsers(usersList.getUsersList());
return flag;
}
4.两个参数绑定时候:(一个是list,一个是参数)
@ResponseBody
@RequestMapping("/updateChooseUsers")
//http://localhost:8888/项目名称///updateChooseUsers?usersList[0].userName=qq&authority=0
// public boolean updateUsers(List<User> user,int authority){
public boolean updateUsers(UserListFormusersList,@RequestParam("authority")intauthority) //http://localhost:8888/MyCourseOnlineProject///updateChooseUsers?usersList[0].userName=admin&authority=0
//传用户列表:更改指定指定用户列表信息 //成功!
boolean flag=userService.updateUsers(usersList.getUsersList(),authority);
return flag;
}
5.前端在jsp中,首先要导入json的包,导入jQuery
然后在页面中这样写可以用阿贾克斯ajax来获取后台传的json数据,这样就好方便啦!
<%@ page language="java"import="java.util.*" pageEncoding="utf-8"%>
<%
String path =request.getContextPath();
String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<linkrel="stylesheet" type="text/css"href="styles.css">
-->
<script type="text/javascript" src="<%=basePath %>js/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function(){
$('#toLogin').click(function() {
alert("点击了一次");
//验证用户名密码
var truename = $('#truename').val();
varuserPwd = $('#userPwd').val();
alert("您的用户名字:"+truename);
$.ajax({
type: "POST",
url: "<%=basePath %>/selectOneUseByTrueName",
data: {
truename: truename,
userPwd: userPwd
},
dataType: "text",
success: function(data) {
console.log(data);
//alert("您的用户名字:"+data);
},
error: function(jqXHR) {
alert('failte');
console.log("发生错误:" +jqXHR.status);
}
});
});
});
functiongetQuetionAgain(event) {
// 获取题目
$.ajax({
type: "get",
url: "data/exercise.json",
data: {
// 题目类型为1
test: 2,
length:6
},
dataType: "text",
success: function(data) {
var data = JSON.parse(data);
var question1 = data.question1;
// 将选择题渲染到页面
var tag = '';
for (var i = 0; i <question1.length; i++) {
var question = question1[i];
var Bt = '<divclass="change"><div class="changeradio"><inputtype="radio" name="que' + i + '" value="A" >A、'+ question.A + '</div><div class="changeradio"><inputtype="radio" name="que' + i + '" value="B" >B、'+ question.B + '</div><div class="changeradio"><inputtype="radio" name="que' + i + '" value="C" >C、'+ question.C + '</div><div class="changeradio"><inputtype="radio" name="que' + i + '" value="D" >D、'+ question.D + '</div></div>';
// 做到倒数第二条的时候,再次加载题目
if (i >= (question1.length -2)) {
Bt = '<divclass="change getQuetion"><divclass="changeradio"><input type="radio"name="que' + i + '" value="A" >A、'+ question.A + '</div><div class="changeradio"><inputtype="radio" name="que' + i + '" value="B" >B、'+ question.B + '</div><div class="changeradio"><inputtype="radio" name="que' + i + '" value="C" >C、'+ question.C + '</div><div class="changeradio"><inputtype="radio" name="que' + i + '" value="D" >D、'+ question.D + '</div></div>';
}
tag += '<divclass="question"><div class="questionTitle"><span>'+ (flog + 1) + '、</span><p>'+ question.title + '<spanclass="glyphicon"></span></p></div>' + Bt +'</div>';
answer.push(question.answer);
flog++;
}
$('.getQuetion').removeClass('getQuetion');
$('#question1Box').html($('#question1Box').html()+tag);
$("input").change(showAnswer);
$('.getQuetion').click(getQuetionAgain);
},
error: function(jqXHR) {
alert('题目获取失败!请与管理员联系!');
}
});
}
</script>
</head>
<body>
<form action="<%=basePath %>/selectOneUseByTrueName" method="post">
<input type="text" name="truename"/>
<input type="submit" >
</form>
<div id="lo-form"class="clearfix" >
<h2>课程在线中心登录页面</h2>
<p>
<label for="truename">用户名:</label>
<input name="user-name"type="text" required="required"placeholder="用户名" id="truename">
</p>
<p>
<label for="userPwd">密码</label>
<input type="password"name="user-password" placeholder="密码" id="userPwd">
</p>
<input type="submit"value="登录" id='toLogin'>
<a href="#">立即注册</a>
</div>
</body>
</html>
附上一张前端ajax的设计
个人心得:
其实这些多少个斜杠也是不影响的喔。
(2)jar包一定不可以冲突,否则会报很多错误的。最好建议用maven去管理。如果能用maven管理就用maven吧,真的是不会有这种烦恼。
(3)spring能达到解耦的效果,记得配置时候要扫描到你的类,路径不能错误,否则是找不到类的。
(4)返回json数据给前端,无需烦恼在java中转换json类型,直接在配置文件那里写好就可以了。
(5)hibernate和springmvc 还有spring组合,hibernate可以用正向工程和反向工程。个人觉得反向工程(数据库表生成Java类)会遇到很多错误,但是正向工程(java类生成数据库表)又得写很多字段,怎么解决?
解决方法:
(1)先反向工程,也就是hibernate中先从数据库表中生成java类,
(2)修改生成的字段,那些关联关系不对,那些需要更改,已经知道配置好hibernate了,然后使用正向工程反过来生成数据库表,这样是绝对不对错的喔。(这个已经弄了两天两页,才得出的心得呢)
分享下生成的代码:
添加下边这个类,如果已经配置好hibernate,还有实体类、以及实体类的映射表, 直接执行下边的类就可以实现生成数据库表
package com.hmy.ssh.util;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
//初始化环境工具类,正向创建数据库表
public class InitEvn {
public static voidmain(String[] args) {
//Hibernate的配置类对象,用于创建SessionFactory.
Configurationconf = new Configuration().configure();
SchemaExport se= new SchemaExport(conf);
//正向工程 (是否显示脚本, 是否执行脚本)
se.create(true,true);
}
}
(6)如果hibernate觉得麻烦,还可以用mybatis.也就是 springmvc+spring+mybatis,也是很好用的喔