发表于: 2018-01-13 11:26:56

2 634


今天完成的事情

1.接着昨天的controller和jsp页面的理解

  (1)删除一条数据的方法:

@RequestMapping(value = "/delStu/{id}",method = RequestMethod.GET)  //这原来是DELET,一直删除不了,还有list.jsp中的问题,没有指定对url,之前指定的是updStu
public String delete(@PathVariable("id") Integer id) {//通过url传参使用到@PathVariavle来获得url中的动态参数。

   studentService.delete(id);
   return "redirect:/stus";

}

通过url传参数,用到的是@PathVariavle来获得url中的动态参数。   

可以看到,是执行完毕之后直接刷新/stus,也就是list.jsp。

  接下来是看看删除按钮:

<td><a href="${pageContext.request.contextPath}/delStu/${stu.id}">删除</a></td>

  这样的一个流程表述是:在点击对用id的删除按钮时,这个id随着删除请求进入了controller,controller执行删除数据操作,并刷新页面。

  (2)接下来是查找方法:

<a href="${pageContext.request.contextPath}/seeStu">查找页面</a>

  在欢迎界面点击查找页面,发送请求到controller,

@RequestMapping(value = "/seeStu", method = RequestMethod.GET)
public String see(){
return "select";
}

  返回一个select界面:

<body>


<h1>你想要的,我这儿都有</h1>

<h2>查一查,看一看</h2>
<br/>
<hr/>

<form:form action="${pageContext.request.contextPath}/seeStu" method="POST">
要搜的ID:<input type="text" name="id" ><br/>
   <input type="submit" value="查找">
</form:form>

</body>

   在这里可以看到,点击提交之后是发送数据到/seeStu,再回到controller:

@RequestMapping(value = "/seeStu",method = RequestMethod.POST)
public String getStudent( Integer id, Model model){
Student student = studentService.getStudent(id);
   model.addAttribute("student",student);
   return "detail";
}

   请求进来之后,方法体获得学生信息放在变量student里面,通过model传入detail的student里面,最后返回detail页面:

<c:if test="${student == null}">
没有学生信息
</c:if>

<c:if test="${student != null}">
ID:${student.id}<br/>
   qq:${student.qq}<br/>
   name:${student.name}<br/>
   school:${student.school}<br/>
   类型:${student.type}<br/>
   宣言:${student.say}<br/>
   创建时间:${student.create_at}<br/>
   更新时间:${student.update_at}<br/>
</c:if>

   这里加了一个判断是否为空值

   (3)然后是更新数据的方法:

<td><a href="${pageContext.request.contextPath}/updStu/${stu.id}">编辑</a> </td>

 点击按钮之后会发送请求到controller,这里controller会取得url中的参数,并以此得到数据,然后映射到in.jsp里面的student,最后返回in界面:

@RequestMapping(value = "/updStu/{id}",method = RequestMethod.GET)
public String in(@PathVariable("id") Integer id,Model model){
Student student = studentService.getStudent(id);

   model.addAttribute("student",student);
   return "in";

}

 映射到下面的student

<form:form action="${pageContext.request.contextPath}/updStu/${student.id}" method="put" modelAttribute="student">
<%--<input hidden name="_method" value="PUT">--%>
   ID:${student.id}<br/>
   <br/>
   QQ:${student.qq}<br/>
   QQ:<form:input path="qq"/><br/>
   姓名:${student.name}<br/>
   姓名:<form:input path="name"/><br/>
   学校:${student.school}<br/>
   学校:<form:input path="school"/><br/>
   类型:${student.type}<br/>
   类型:<form:input path="type"/><br/>

   宣言:${student.say}<br/>
   宣言:<form:input path="say"/><br/>
   创建时间:${student.create_at}<br/>
   更新时间:${student.update_at}<br/>
   更新时间:<form:input path="update_at"/><br/>
   <input type="submit" value="提交">

</form:form>

  这里就会显示单钱值和你要更改的值了,点击提交之后,会发送put请求到对应的url:

@RequestMapping(value = "/updStu/{id}",method = RequestMethod.PUT,produces = "text/html;charset=UTF-8")
public String update(Student student, @PathVariable("id") Integer id) throws IOException {
studentService.update(student,id);

   return "redirect:/stus";

}

  获得数据后更新数据并刷新/stus页面。

  2.至此算是理解完了,整个流程树立了一遍,接下来想要付一下bug:在查询时如果输入的id不存在的话应该是返回同一页面不同信息的,但是现在返回的是500,接下来修复

org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:795)

   搞了半天都不行,去百度了一下,有个大佬写的文章已下载明白了:

   大佬直接给出了源码:

  1. public static <T> T requiredSingleResult(Collection<T> results) throws IncorrectResultSizeDataAccessException {  
  2.         int size = (results != null ? results.size() : 0);  
  3.         if (size == 0) {  
  4.             throw new EmptyResultDataAccessException(1);  
  5.         }  
  6.         if (results.size() > 1) {  
  7.             throw new IncorrectResultSizeDataAccessException(1, size);  
  8.         }  
  9.         return results.iterator().next();  
  10.     }  

  发现当查询的result为空时,size赋值为0,并抛出EmptyResultDataAccessException异常,此为原因所在。猜测Spring这样设计可能是为了防止用户不对空值做出判断,保证了程序的健壮性。同时,当results的size大于1时同样会抛出异常,以保证返回单一的Object。

  我的理解就是jdbc里面的单一查询返回值不允许为空值。

3.了解了一下javascript

    (1)JavaScript用于网页和用户之间的交互。

  例如下面这段代码

<button onclick="document.getElementById('text').style.display='none'">隐藏文本</button>

<button onclick="document.getElementById('text').style.display='block'">显示文本</button>

<p id="text"> 这个是一段可以被javascript隐藏的文本</p>

  显示效果:

可以通过点击来实现文本的隐藏和显示。

    (2)script标签内可以使用注释,类似与java代码的注释。

    (3)也可以在script标签内声明变量   var x = 10;  这里的var可有可无。命名规则也和java差不多

    (4)调试方法:在script里面加上alert(1),会弹出一个窗口,如果弹出证明其上面的代码没问题

  在demo里面添加

<script>alert(1)</script>

运行界面时就会弹出一个窗口:

,非常有意思

     (5)基本数据类型

   undefined 声明了但是未赋值。

   Boolean

     在script中没有字符的概念,只有字符串,单双引号都是字符串。

     script中的变量是动态的,用typeof 变量名    来获取当前的类型。

      (6)script的函数,函数就是一段可以重复使用的代码。

    function用于定义一个函数,举例如下:

<script>
   function print(){
document.write("这一句话是由一个自定义函数打印");
   }
print();
</script>

    可以重复使用,打印输出。

    (7)onclick="..." 表示点击button之后做的事情

<script>
   function show(){
alert("I e DD");
   }
</script>

<button onclick="show()">点击一下</button>

    点击之后就会有个弹窗了。

4.接下来尝试整合spring和mybatis,但是失败了。。。

  总是运行不起来,明天接着整合。

5.与师兄探讨了springmvc的工作流程

  对springmvc的大致工作流程了解了一点。


今天遇到的问题

  spring和mybatis整合失败好几次,整个人状态也不太好,迷迷糊糊的,感觉自己啥都没学到啊,开始有那么一些怀疑自己。


今天的收货

   今天将配置文件的含义弄清楚了,但是自己写的话还是写不出来,还要继续努力。


明天计划的事情

   继续整合我支离破碎的mybatis和spring以及我支离破碎的心。如果还是不行的话,我就从零开始,最简单的mybatis整合spring,我就不信我弄不成这个破东西



返回列表 返回列表
评论

    分享到