发表于: 2018-01-13 11:26:56
2 635
今天完成的事情
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)
搞了半天都不行,去百度了一下,有个大佬写的文章已下载明白了:
大佬直接给出了源码:
- public static <T> T requiredSingleResult(Collection<T> results) throws IncorrectResultSizeDataAccessException {
- int size = (results != null ? results.size() : 0);
- if (size == 0) {
- throw new EmptyResultDataAccessException(1);
- }
- if (results.size() > 1) {
- throw new IncorrectResultSizeDataAccessException(1, size);
- }
- return results.iterator().next();
- }
发现当查询的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,我就不信我弄不成这个破东西
评论