ssm项目随笔(一)
一:配置文件问题:
1:问题描述:静态资源无法访问(例如:css无法渲染)
问题原因:前端控制器(DispatcherServlet)设置了对所有请求响应
解决:配置静态资源映射,例如:
<mvc:resources mapping="/css/**" location="/WEB-INF/css/"/><mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/"/>
<mvc:resources mapping="/layer/**" location="WEB-INF/layer/"/>
2:问题描述:mybatis配置后无法访问到 mapper文件
解决:在dao层的pom.xml中配置,让其识别该类型配置文件
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>false</filtering>
</resource>
二:ajax响应
定义一个响应类返回响应数据给前端(ajax)
例如:
public class ResponseResult {
//状态码
private int status;
//响应消息
private String message;
//数据
private Object data;
配置json格式响应:
<mvc:annotation-driven>
<!-- 配置 json 形式数据传输-->
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json;charset=utf-8"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
三:页面数据分页
-
后端处理(pagehelper.jar)(发送查询的数据到前端)
1:配置分页插件,配置到spring与mybatis整合的文件中(SqlSessionFactoryBean内配置)
例如:
<property name="plugins"> <list> <bean class="com.github.pagehelper.PageInterceptor"> <property name="properties"> <props> <prop key="helperDialect">mysql</prop> </props> </property> </bean> </list> </property>
2:使用pagehelper分页
在查询数据(findAll)时使用即可,这边给个例子:
@RequestMapping("/findAll") public String findAll(Integer pageNum,Model model){ if (ObjectUtils.isEmpty(pageNum)){ pageNum = PageInationConstant.PAGE_NUM; } PageHelper.startPage(pageNum, PageInationConstant.PAGE_SIZE); List<Product> productList = productService.findAll(); PageInfo<Product> productPageInfo = new PageInfo<>(productList); model.addAttribute("pageInfo",productPageInfo); return "productManager"; }
在查询前使用PageHelper.startPage(pageNum,totalNum)
封装数据的类PageInfo(这里我们也可以自定义一个数据类),这个类是插件中提供的,查看一下其中的属性:
public class PageInfo<T> extends PageSerializable<T> { //当前页 private int pageNum; //每页的数量 private int pageSize; //当前页的数量 private int size; //由于startRow和endRow不常用,这里说个具体的用法 //可以在页面中"显示startRow到endRow 共size条数据" //当前页面第一个元素在数据库中的行号 private int startRow; //当前页面最后一个元素在数据库中的行号 private int endRow; //总页数 private int pages; //前一页 private int prePage;
这里注意其中的数据:
1:pageNum 2:pages 3:list(PageSerializable中的数据)(数据列表)
前端数据的展示和分页设置需要这些数据
-
前端处理(bootstrap-paginator.js)
1:如何显示分页图标
在需要显示的表格下添加无需列表即可
例如:
</table> <ul id="pagination"></ul>
2:分页配置,页面加载完即启动:
$(function){ $('#pagination').bootstrapPaginator({ bootstrapMajorVersion: 3, currentPage: ${pageInfo.pageNum}, totalPages: ${pageInfo.pages}, pageUrl:function (type,page,current) { return '${pageContext.request.contextPath}/backend/product/findAll?pageNum='+page; }, }); }
四:文件数据上传
问题描述:使用from表单设置enctype="multipart/form-data"后提交文件数据, 后台接收不到数据(null)
问题原因:DispatcherServlet没有能解析multipart请求数据的功能,需要我们配置一个
解决:spring配置文件中配置:例如
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- value 为字节 1M = 1024kb 1kb = 1024byte 配置10M左右大小-->
<property name="maxUploadSize" value="10000000"/>
</bean>
五:controller的vo转化成service层的dto(文件信息传输类)
自定义controller层的vo类和service层的dto类
分层处理后spring-web只在controller层,
其中的CommonsMultipartFile用来接收文件数据,将文件信息传入service层需要转为特定的dto
六:bootstrapValidate表单校验
问题描述:表单校验数据是否存在时向后端发请求时反应错误
问题原因:bootstrapValidate中的remote.js默认GET请求,GET发请求时中文会转为16进制形式
解决:改用POST形式
fields: {
name: {
validators: {
notEmpty: {
message: '用户名不能为空'
},
remote:{
type:'post', url:'${pageContext.request.contextPath}/backend/product/checkName'
}
}
},