发表于: 2018-03-28 23:50:37

2 625


今天又学了很多新知识,最重要的一条,有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 



返回列表 返回列表
评论

    分享到