2.7.3 整合静态页面
-
将准备好的静态页面放入WEB-IF下
静态资源.PNG -
由于在web.xml中定义的url拦截形式为“/”表示拦截所有的url请求,包括静态资源例如css、js等。所以需要在springmvc.xml中添加资源映射标签
<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>
<mvc:resources location="/WEB-INF/css/" mapping="/css/**"/>
2.8 修改taotao-manager-mapper的pom文件
在pom文件加入如下内容:
<!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉,mapper文件由mapperGenerator工具生成 -->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
2.9 整合测试
2.10 页面初始化
如果不使用tomcat插件,可以利用idea对tomcat进行配置
欢迎页.PNG
注意:
这里之所以访问localhost:8080/index会自动返回一个index.jsp页面,是因为在web.xml中配置了欢迎页,
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
欢迎页的功能类似于一个如下的controller:
@Controller
public class indexController {
@RequestMapping("/index")
public String showIndex(){
return "index";
}
注意:
web.xml中关于DispatcherServlet的url路径配置<url-pattern>/</url-pattern>
,其实有很多讲究,如果url-pattern设置为/
,则所有的静态资源都会被拦截,但不会影响jsp,对静态资源的访问都会除去后缀名,处理为对controller的调用。
2.11页面的切换
@Controller
public class PageController {
//打开首页
@RequestMapping("/")
public String showIndex(){
return "index";
}
//展示其他页,儒新增商品,查询商品等等
@RequestMapping("/{page}")
public String showPage(@PathVariable String page){
return page;
}
}
3. 商品列表查询
3.1 商品列表页面
查询商品列表.PNG红色画圈部分表示请求对应的jsp为item-list.jsp,对应于2.11
PageControlller
中的@RequestMapping("/{page}")
在加载出item-list.jsp,页面发起一个url为/item/list的get请求,请求参数为page和rows,为EasyUI自带的两个参数在item-list.jsp中table的标签上可以看到,如下,
<table class="easyui-datagrid" id="itemList" title="商品列表"
data-options="singleSelect:false,collapsible:true,pagination:true,url:'/item/list',method:'get',pageSize:30,toolbar:toolbar">
客户端发起get请求:
商品列表请求.PNG
服务端响应回json数据:
商品列表返回结果.PNG
请求返回的数据必须为以下类型的实体转为的json字符串,EasyUI会根据这种格式的json字符串,自动解析json数据,渲染到页面,渲染结果即为上图查询商品列表所示
public class EUDataGridResult {
private long total;
private List<?> rows;
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public List<?> getRows() {
return rows;
}
public void setRows(List<?> rows) {
this.rows = rows;
}
}
其中rows列表中的实体类属性要与item-list.jsp的table标签中filed属性名一一对应,如下:
TbItem实体:
public class TbItem {
private Long id;
private String title;
private String sellPoint;
private Long price;
private Integer num;
private String barcode;
private String image;
private Long cid;
private Byte status;
private Date created;
private Date updated;
//set和get方法省略。。。
}
item-list.jsp的table标签中filed属性:
<th data-options="field:'ck',checkbox:true"></th>
<th data-options="field:'id',width:60">商品ID</th>
<th data-options="field:'title',width:200">商品标题</th>
<th data-options="field:'cid',width:100">叶子类目</th>
<th data-options="field:'sellPoint',width:100">卖点</th>
<th data-options="field:'price',width:70,align:'right',formatter:TAOTAO.formatPrice">价格</th>
<th data-options="field:'num',width:70,align:'right'">库存数量</th>
<th data-options="field:'barcode',width:100">条形码</th>
<th data-options="field:'status',width:60,align:'center',formatter:TAOTAO.formatItemStatus">状态</th>
<th data-options="field:'created',width:130,align:'center',formatter:TAOTAO.formatDateTime">创建日期</th>
<th data-options="field:'updated',width:130,align:'center',formatter:TAOTAO.formatDateTime">更新日期</th>
当Controller返回一个EUDataGridResult对象时,@ResponseBoby会自动将其转为json格式的字符串,
@Controller
public class ItemController {
@Autowired
ItemService itemService;
@RequestMapping("/item/list")
@ResponseBody
public EUDataGridResult getItemList(Integer page,Integer rows){
EUDataGridResult result = itemService.getItemList(page,rows);
return result;
}
}
service的实现类中的getItemList方法,分页利用MyBatis的一个插件PageHelper,但是注意该插件对联合查询不友好
@Override
public EUDataGridResult getItemList(int page, int rows) {
//查询商品列表
TbItemExample example = new TbItemExample();
//分页处理
PageHelper.startPage(page, rows);
List<TbItem> list = itemMapper.selectByExample(example);
//创建一个返回值对象
EUDataGridResult result = new EUDataGridResult();
result.setRows(list);
//取记录总条数
PageInfo<TbItem> pageInfo = new PageInfo<>(list);
result.setTotal(pageInfo.getTotal());
return result;
}
3.3 分页处理
3.3.1 Mybatis分页插件 - PageHelper说明
如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。
3.3.2 使用方法
第一步:在Mybatis配置xml中配置拦截器插件:
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
第二步:在代码中使用
1、设置分页信息:
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
//紧跟着的第一个select方法会被分页
List<Country> list = countryMapper.selectIf(1);
2、取分页信息
//分页后,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>,
Page<Country> listCountry = (Page<Country>)list;
listCountry.getTotal();
3、取分页信息的第二种方法
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectAll();
//用PageInfo对结果进行包装
PageInfo page = new PageInfo(list);
//测试PageInfo全部属性
//PageInfo包含了非常全面的分页属性
assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());
网友评论