LayUI删除数据,重载后出现数据接口异常时的解决方案
js代码
table.on('tool(demo)', function (obj) {
// data为当前要删除的对象
var data = obj.data;
if (obj.event === 'detail') {
//icon是图标,6是图标编号,默认没有
//time是msg弹框的显示时间,默认三秒,这里是10秒
layer.msg('特性:'+JSON.stringify(data.cardPower),{icon:6,time:10000});
} else if (obj.event === 'del') {
layer.confirm('真的删除行么', function (index) {
obj.del();
layer.close(index);
// 获取对象的id,cardId为自己命名的名称
console.log(data.cardId);
// 重载,'idTest'为table的id
table.reload('idTest',{
// servlet路径
url: '${pageContext.request.contextPath}/cards?method=del',
// 传过去附带的参数内容
where:{
'id[]' : data.cardId
}
});
});
} else if (obj.event === 'edit') {
layer.alert('编辑行:<br>' + JSON.stringify(data))
}
});
java代码
public void del(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
// 获取参数
String[] ids = request.getParameterValues("id[]");
// 调用根据id删除数据的方法
cardService.deleteByIds(ids);
// 调用all方法,响应数据
allData(request, response);
}
public void allData(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
// 获取分页的参数(当前第几页),因为没有设置过“p”的值,所以默认为0
String currentPage = request.getParameter("page");
// 正因为为0,所以这里半段是否为空是返回true的
if(StringUtils.isEmpty(currentPage)) {
// 初始化当前页数为1
currentPage = "1";
}
// 设置每页显示的条数
// 创建一个分页对象 转换为数字对象类型 传入当前页数
Page page = Page.of(Integer.valueOf(currentPage));
// 获取查询的条件 若jsp那边没有form表单提交的查询条件,
// 那么这里就啥都没有,所以执行的条件查询就不会带条件去查询,
// 所以查询到的结果将会为所有卡牌数据
Map<String, String[]> parms = request.getParameterMap();
// 调用分页方法获取数据,这个数据里面放了一页里能存放的所有卡牌
Page<Card> cardsPage = cardService.myFindPageCard(page, parms);
// 这里我将json封装了一下,具体内容在下面的代码块
LayuiData layuiData = new LayuiData();
layuiData.setCode(0);
layuiData.setCount(cardsPage.getTotalCount());
layuiData.setMsg("");
// cardPage.getPageData为分页后的数据集合(List)
layuiData.setData(cardsPage.getPageData());
// 把对象转成JSON,这里我用的是阿里爸爸的fastjson,如果你的是maven项目,那么直接在pom.xml里面放入
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.61</version>
</dependency>
// 就可以了
// 将封装后的数据转成json格式的数据
String jsonString = JSONObject.toJSONString(layuiData);
// 设置响应的格式
response.setContentType("application/json;charset=utf-8");
// 将数据响应到浏览器
PrintWriter writer = response.getWriter();
writer.print(jsonString);
writer.close();
}
// LayuiData对象
public class LayuiData {
private int code;
private String msg;
private int count;
private List data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public List getData() {
return data;
}
public void setData(List data) {
this.data = data;
}
}
// page对象
public class Page<T> {
/**
* 分页后的数据集合
*/
private List<T> pageData;
/**
* 当前的页码
*/
private Integer currentPage = 1;
/**
* 每页显示条数
*/
private Integer pageSize = 10;
/**
* 总条数
*/
private Integer totalCount;
public int getPageCount() {
if (this.totalCount % this.pageSize == 0){
return this.totalCount / this.pageSize;
}
return this.totalCount / this.pageSize + 1;
}
/**
* 创建分页对象
*
* @param currentPage 当前页码
* @return 分页对象
*/
public static Page of(Integer currentPage) {
Page page = new Page();
page.setCurrentPage(currentPage);
return page;
}
/**
* 获取当前页面后,判断当前页是否大于0
* @return
*/
public int getCurrentSize() {
Integer cp = this.currentPage;
//判断当前页是否大于0
if (cp > 0) {
//大于0后点击前一页就跳到前一页的页面数据
cp -= 1;
} else {
// 否则就没法再下一页
cp = 0;
}
// 判断分页开始的位置是否大于总条数
int currentSize = cp * this.pageSize;
if (currentSize > this.totalCount){
// (5-1)*10 38
// 获取总分页数
currentSize = (this.currentPage - 1) * pageSize;
}
return currentSize;
}
public List<T> getPageData() {
return pageData;
}
public void setPageData(List<T> pageData) {
this.pageData = pageData;
}
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotalCount() {
return totalCount;
}
public void setTotalCount(Integer totalCount) {
this.totalCount = totalCount;
}
}
总结:出现数据接口异常的原因是出在没有响应Ajax的请求,也就是没有执行allData方法里面的代码,没有向浏览器发送数据就导致浏览器没有数据可显示,然后人家就只好给你报数据接口异常咯
emmm…这里是萌新一枚,代码写得太丑的话还请前辈不吝赐教0-0