关于分页时怎么实现当本页面最后一条记录被删除时,自动向上一个页面跳转的实现(java实现)

##问题详解
在做批量删除时,发现若批量删除整页时,会自动跳到第一页首页,而不是返回删除当前页的上一页,不符合产品要求且使界面交互不好,给用户带来糟糕体验。
##思路详解
在controller层传参时要考虑到不仅要传入需要删除的id集合,同时传入pageSize,pageNum以及总条数集合的查询条件(如:本示例会传入groupId(分组id)),在删除成功后初始化当前页,先根据查询条件查询出总条数数量,在pageSize不等于null或为0的情况下。算出余数[(pageSize*pageNum-count)%pageSize ].若余数为0,则当前页等于pageNum-1;若余数不为0,则当前页=pageNum.将结果当前页传给前台即可。
##后台代码实现
#controller层#

@Api(description = "分组下的学生",value = "分组下的学生")
@RestController
@RequestMapping("studentGroup")
public class StudentGroupController {
    @Autowired
    private RestStudentGroupService restStudentGroupService;


    @RequestMapping(value = "deleteGroupStudent",method = RequestMethod.POST)
    @ApiOperation(value = "删除分组中的学生",notes = "删除分组中的学生")
    public ResponseObj deleteGroupStudent(@RequestParam(value = "groupId",required = true)Long groupId,
                                        @RequestParam(value = "ids",required = true)String ids,
                                       @RequestParam(value = "pageSize",required =  false)Integer pagesize,
                                       @RequestParam(value = "pageNum",required =  false)Integer pageNum){

        return restStudentGroupService.deleteGroupStudent(groupId,ids,pagesize,pageNum);
    }
 }

#service层#

@FeignClient(value = ServiceName.VALUE)
public interface RestStudentGroupService {

    @RequestMapping(value = "/school/cloud/student/deleteGroupStudent",method = RequestMethod.POST)
    public ResponseObj deleteGroupStudent(@RequestParam(value = "groupId")Long groupId,
                                  @RequestParam(value = "ids")String ids,
                                       @RequestParam(value = "pageSize")Integer pagesize,
                                       @RequestParam(value = "pageNum")Integer pageNum);
                                       }

#serviceImpl层#

@Service
public class  RestStudentGroupServiceImpl implements RestStudentGroupService {

    @Autowired
    private DubboStudentGroupService   dubboStudentGroupService   ;
    @Override
    public ResponseObj deleteGroupStudent(Long groupId,String ids,Integer pageSize,Integer pageNum) {

        List idList =  TextUtils.split(ids);
        if(groupId == null || idList== null || idList.size() == 0){
            ResponseObj responseObj = ResponseObj.ERROR("参数错误");
            responseObj.setSuccess(true);
            return responseObj;
        }
        ServiceResult serviceResult = dubboStudentGroupService   .deleteCorpGroup(idList, groupId);
        if(!serviceResult.getSuccess()){
            throw new RuntimeException("分组下学生查询失败");
        }
        //应前端要求加此dto,封装传给前台的当前页属性
        CurrenPageDto currenPageDto=new CurrenPageDto();
        //初始化当前页
        Integer currentPage = 1;
        //查出该分组id下的学生数量
        ServiceResult itemCountLongs = dubboStudentGroupService.getTotalCount(groupId);
        Long itemCountLong= itemCountLongs.getResult();
        Integer itemCount = itemCountLong!=null ? itemCountLong.intValue() : 0;
      //"查询到学生数量:{},pageSize:{}", itemCount,pageSize;
        if(pageSize != null && pageSize != 0){
            //算出余数
            Integer temp = (pageNum*pageSize-itemCount)%pageSize;
            if(temp == 0){
                //余数为0的话就pageNum-1
                currentPage = (pageNum - 1) == 0 ? 1 : (pageNum -1) ;
            }else {
                //余数不为0则等于pageNum
                currentPage = pageNum;
            }
            currenPageDto.setPresentPage(currentPage);
        }
        ResponseObj responseObj = ResponseObj.SUCCESS();
        responseObj.setData(currenPageDto);
       return  responseObj;
    }
}

#dubbo接口的service层#

①://删除分组下的学生
ServiceResult deleteCorpGroup(List idList,Long groupId);
②://根据条件查询对应的条目总数
ServiceResult getTotalCount(Long groupId);

#dubbo接口的serviceImpl层#

①://删除分组下的学生
 @Override
    public ServiceResult deleteCorpGroup(List idList, Long groupId) {
        ServiceResult result = new ServiceResult<>();

        try {
            studentGroupDao.deleteCorpGroup(idList, groupId);
        } catch (Exception e) {
            log.error("调用{}方法 异常", "[RestStudentGroupServiceImpl .deleteCorpGroup]");
            log.error("方法使用参数:[idList:{},groupId:{}]", idList, groupId);
            log.error("异常信息:{}", e);
            result.setErrMessage("调用deleteCorpGroup方法异常,异常信息:" + e.getMessage());
        }

        return result;
    }
②://根据条件查询对应的条目总数
    @Override
    public ServiceResult getTotalCount(Long  groupId) {
        ServiceResult result = new ServiceResult<>();

        try {
            long count = studentGroupDao.getFindCorpGroupDirectoryCount(groupId);
            result.setResult(count);
        } catch (Exception e) {
            log.error("调用{}方法 异常", "[RestStudentGroupServiceImpl .getTotalCount]");
            log.error("方法使用参数:[groupId:{}]", groupId);
            log.error("异常信息:{}", e);
            result.setErrMessage("调用getTotalCount方法异常,异常信息:" + e.getMessage());
        }

        return result;
    }

#dubbo接口的dao层#

①://删除分组下的学生
 Long deleteCorpGroup(@Param(value = "idList") List idList,@Param(value = "groupId") Long groupId);
②://根据条件查询对应的条目总数
Long getFindCorpGroupDirectoryCount(@Param(value = "groupId") Long groupId);

#dubbo接口的sql#

①://删除分组下的学生
 
        delete from student_group where group_id = #{groupId} and id in
        
            #{id}
        
    
②://根据条件查询对应的条目总数
  

#Entity类(学生分组类)#(get,set函数省略)

public class StudentGroup implements java.io.Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
     * @描述:     
     * @字段:id BIGINT(19)  
     */	
	private Long StudentGroupId;

	/**
     * @描述:     
     * @字段:group_id BIGINT(19)  
     */	
	private Long groupId;

	/**
     * @描述:     
     * @字段:id BIGINT(19)  
     * 此id为学生表id
     */	
	private Long id;

	/**
     * @描述:创建时间     
     * @字段:create_time DATETIME(19)  
     */	
	private java.util.Date createTime;

     * @描述:创建人用户名     
     * @字段:create_user_name VARCHAR(30)  
     */	
	private String createUserName;

	/**
     * @描述:创建人用户ID     
     * @字段:create_user_id BIGINT(19)  
     */	
	private Long createUserId;

	/**
     * @描述:更新时间     
     * @字段:update_time DATETIME(19)  
     */	
	private java.util.Date updateTime;

     * @描述:更新人用户名     
     * @字段:update_user_name VARCHAR(30)  
     */	
	private String updateUserName;

	/**
     * @描述:更新人用户ID     
     * @字段:update_user_id BIGINT(19)  
     */	
	private Long updateUserId;
	}

#Entity类(学生类)#(get,set函数省略)

public class Student implements java.io.Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private Long id;
	private String name ;
	private Integer age;
	}

你可能感兴趣的:(关于分页时怎么实现当本页面最后一条记录被删除时,自动向上一个页面跳转的实现(java实现))