发表于: 2018-03-28 23:50:37
2 623
今天又学了很多新知识,最重要的一条,有GET方法才会在页面显示。PUT,POST,DELETE方法就直接在程序里连接数据库执行了
但是我没想到Controller里面我还有那么多没学会的东西,所以昨天定的目标完不成了
@Controller
public class StudentController {
private static final Logger log = LoggerFactory.getLogger(StudentController.class);//自动装配,相当于一个声明,告诉spring我要使用你装配好的bean了
@Autowired
//访问修饰限制符,只能在本类读取。default,protected,public修饰符。Studentservice是引用类型,s属性
private StudentService studentService;
//查询所有学生。通过前端页面通过GET方法,传入/student/list/值。@RequestMapping(value = "/student/list",method = RequestMethod.GET)
//返回值类型是String。Mddel model是形参,创建studentList对象,调用list()方法。调用model里面的addAttribute方法,才能在页面展示。
public String list(Model model) {
List<Student> studentList = studentService.list();
model.addAttribute("students" , studentList);
return "list";
}
//添加学员
//这个添加学员的方法也是在页面填入,为什么不需要调用model.addAttribute方法呢?因为他调用了插入方法之后,就直接回到了/student/list页面@RequestMapping(value = "/student",method = RequestMethod.POST)
//为什么这个传入的参数,里面有Student student呢?因为插入的数据时候,插入的是id,name,qq,major
public String addStudent(Student student){
调用insert方法
studentService.insert(student);
//重定向,只有后面是GET,就有页面。
return "redirect:/student/list";
}
//添加学员跳转页
这个也有GET,所以就可以有页面。前端页面通过GET方法,寻求这个/student/add地址。
@RequestMapping(value = "/student/add",method = RequestMethod.GET)
public String toAddStudent() {
//log.info("open /student/a GET");
返回add,展示数据。
return "add";
}
//删除学员
//@PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过
//@PathVariable("xxx") 绑定到操作方法的入参中。@RequestMapping(value = "/student/{id}",method = RequestMethod.DELETE)
这个id,往上写入/student/{id}。这个id是和intid绑定的。往下写入deleteByPrimaryKey方法
public String delStudent(@PathVariable("id") int id){
studentService.deleteByPrimaryKey(id);
//返回,重定向/student/list.也就是删除之后返回到list页面。
return "redirect:/student/list";
}
// 跳转到修改学员界面//前端页面要寻求这个/student/u/{id}。通过GET方法。而GET方法是可以显示页面的。
@PathVaiable是把id和int id绑定。因为他会用到id和model,也就是两种参数。
{id} 往上传入到{id}。往下传入到根据id修改学员方法,调用selectByPrimaryKey(id)方法。
@RequestMapping(value = "/student/u/{id}",method = RequestMethod.GET)
public String toUpdateStudent(@PathVariable("id") int id,Model model){Student student = studentService.selectByPrimaryKey(id);
为了显示页面,需要调用model里面的addA方法。
为什么这个更改方法需要新建一个student对象,而上面的删除方法不需要新建一个student对象呢?
这是因为,更改完之后,需要返回到页面,所以新建一个student对象,把数据存入对象里面。
而删除并不返回属性数据,返回的是影响了多少行,并且还直接重定向到list里面了。
如果把model.addAttribute这句话屏蔽的话,等到转到修改页面的时候,你会发现,修改框里是空的,没有数据。而跳转到添加数据页面,里面本来就应该是空的,所以不需要这个方法调用。我终于搞明白了,所以还是多试多问。
model.addAttribute(student);
return "update";
}
//因为不是GET,所以没必要展示方法。PUT方法只需要执行完之后重定向到list页面就行了。
@RequestMapping(value = "/student/{id}" ,method = RequestMethod.PUT)
//@PathVariable这里面的id,是和上面的{id}和下面的int id是绑定的。
public String UpdateStudent(@PathVariable("id")int id ,String name,String qq,String major) {
Student student = new Student();
student.setQq(qq);
student.setId(id);
student.setName(name);
student.setMajor(major);studentService.updateByPrimaryKey(student);
//重定向到list页面。
return "redirect:/student/list";
}
二。去解释jsp页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加</title>
</head><body style="text-align: center">
居中的意思
<h2 style="text-align: center">添加学员</h2>
将from之间的数据,传输到这个路径,到/student里面去,也就是添加学员的post方法。按住student,会跳转到添加学员方法。
<form action="${pageContext.request.contextPath }/student" method="post">
就是name输入的框居中
<br>姓名<input type="text" name="name" style="text-align: center">
<br>QQ<input type="text" name="qq" style="text-align: center"><br>主修<input type="text" name="major" style="text-align: center">
很奇怪,name是添加,但我添加页面上显示提交。因为默认显示提交。后来把name=“添加”删除,后面加了一句value=“添加”,就可以了。
<input type="submit" name="添加"></form>
</body>
</html>
上图是add.jsp
在添加学员跳转页面的时候,最后是return:“add”。虽然也需要展示页面,方法也是GET。但是并没有调用model.addAttribute方法。因为这个add,直接就会跳转到add.jsp。并且add页面里面不需要存有数据。等下再试下代码。刚刚试了一下,把model。addAttribute注释掉,修改页面框里面,没有数据。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title></head>
//居中
<body style="text-align: center"><h2 style="text-align: center">编辑学员</h2>
根据路径传入参数到student${student.id},根据id来。为什么后面方法是post,post明明是添加。
<form action="${pageContext.request.contextPath }/student/${student.id}" method="post" >
//忽然出现的这句话不明白是什么意思,猜测PUT和编辑相关,这里才是真正起作用的地方。还有-method前面为什么有个下划线。
<input type="hidden" name="_method" value="PUT">
<br>姓名<input type="text" name="name" value="${student.name}" style="text-align: center">
<br>QQ<input type="text" name="qq" value="${student.qq}" style="text-align: center">
<br>主修<input type="text" name="major" value="${student.major}" style="text-align: center">
<input type="submit" value="修改">
</form>
</body>
</html>
明天的计划:明天把任务二web.xml的配置文件解释出来;学会json。
遇到的问题:暂无
今天的收获:自己手写了控制器的增删改查,不过不太熟练。重写了jsp页面,有不会的地方。
java任务二开始时间:2018.01.25
预计demo时间:2018.02.12
可能有延期风险,原因是:json看不懂,控制器的逻辑看不懂,所以又回看了java语法
禅道链接地址:http://task.ptteng.com/zentao/project-task-501.html
评论