主要内容:
这里我们还是使用上次整合的工程。
*** 作流程:
根据上面的需求我们可以知道, mapper 中此处需要完成两个功能:
根据持久层 mapper 的相关业务需求,这里我们就可以知道业务层的功能需求
ItemsServiceI.java
ItemsServiceImpl.java
说明: 这里我们的方法还不是很完善,比如这里就没有给出查询条件,在后面一步步完善。
ItemsController.java
说明: 对于商品列表展示页面在整合工程中已经给出,这里我们给出修改页面:
WEB-INF/jsp/items/editItems.jsp
下面我们就可以部署工程,使用地址 http://localhost:8080/springmvc-mybatis01/queryItems.action 进行访问,此时点击页面中的修改页面,就会找到 editItems.action ,我们可以看到修改页面中回显了我们选择要修改商品的信息。当然这里还有一个成功页面 WEB-INF/jsp/items/success.jsp 。
普通 url 地址映射在之前讲过,比如:
所谓窄化请求映射就是当控制器中方法很多,映射很多的时候,我们为了便于管理,一般会将这些 url 地址进行分类管理。这里我们对控制器进行改造,窄化请求映射。
进行窄化请求映射,于是最终的 url 就是跟路径+子路径,比如 /items/queryItems.action 。我们在此处改动之后需要对jsp页面进行改进,在 itemsList.jsp 中
在 editItems.jsp
其中被注释掉的是之前的方式。
一般常用请求方式有 GET 和 POST 两种,但是有时候我们需要规定必须使用哪种方式,在 ItemsController.java :
这里我们限制请求方式必须是 GET 或者 POST ,当然如果这里我们限制为 POST ,那么默认的 GET 提交方式就提交不成功。
这个在之前我们已经讲过,这里不再说明。
说明: 可以看到我们首先将数据存入到 Model 中,然后返回逻辑视图地址。而真正的视图( jsp )还需要加上前缀和后缀。
说明: 一定注意在 Controller 方法中重定向时不需要加根路径。
说明: 通过此种方式进行页面转发, url 地址栏不变, request 可以共享。当然我们说 request 可以共享,那么我们可以给方法传递一个参数 HttpServletRequest :
于是我们在其跳转的方法中可以接收 request :
这样就实现了 request 的共享。我们可以在此方法中进行测试。
在 Controller 方法行参上可以定义 request 和 response ,使用 request 或者 response 指定响应结果:
直接在 Controller 方法的形参上定义下面类型的对象,就可以使用这些对象。在参数绑定过程中,如果遇到下边的类型直接进行绑定(自动进行的)。
说明: 这里我们绑定了一个简单类型( Integer ),如果这个参数名称为 id ,也就是和 request 传入参数名称一致,那么我们不需要使用注解。但是这里我们参数名称是 items_id ,也就是不一致,那么我们需要使用上面的注解进行绑定。 @RequestParam 中 value 指定 request 传入参数名称和形参绑定, required=true 指定此参数是否必须被传入, defaultValue="" 设置默认值。可以绑定的简单类型还有 String、float、double、boolean 。
说明: 这里我们绑定 pojo 类有个前提,就是页面中 input 的名称和 Controller 的 pojo 形参中的属性名称一致,可以自动将页面中的数据绑定到 pojo 中
然后我们再次访问时发生错误,这里的问题是日期类型不能自动绑定,需要我们手动编写转换器之后绑定。对于 Controller 形参中 pojo 对象,如果属性中有日期类型,需要自定义参数绑定。将请求的日期数据串转换成日期类型,要转换的日期类型和 pojo 中日期属性的类型保持一致。需要像处理器适配器中注入自定义的参数绑定组件。在 springmvc.xml 中:
说明: 我们使用 conversion-service 属性给适配器中添加自定义转换器。
自定义转换器 CustomDateConverter.java
说明: 注意自定义转换器需要实现 Converter 接口。其中 String 是我们需要转换的类型, Date 是我们最终需要的类型。
当然这种方式较为繁琐,这里只是了解。
最后: 我们看到这里我们使用这样一个例子将 springmvc 开发中所需要用到的一些基本内容说明了,对于其他功能开发基本就类似了。
建议使用uploadfy插件,但有一点,配置文件里得改,不然不能上传大文件下载在Controller里返回FileStreamResult就行了
return File(new FileStream(fullPath, FileMode.Open), "application/octet-stream", Server.UrlEncode(Path.GetFileName(fullPath)))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)