我刚开始玩春靴,
我有一个问题,是否可以用JpaRepository<T, I>在JSP中分页,我已经在网上搜索了两天,但还没有找到一个。查询结果主要是针对Thymeleaf的,但我不想使用百里香。我知道如何使用JSP使用Jdbctemplate分页,但为此,我必须手动编写查询和页数。我已经编写了一个spring引导& JSP代码。
EmployeeRepository:
public interface EmployeeRepository extends JpaRepository<Emp, Integer> {}EmployeeController:
@Controller
public class EmployeeController {
@Autowired
private EmployeeRepository repo;
@GetMapping("/")
public String showPaginate(Model m, @RequestParam(defaultValue = "0") int page) {
m.addAttribute("data", repo.findAll(new PageRequest(page, 4)));
return "index";
}
}index.jsp
<table border="2" width="70%" cellpadding="3"
class="table">
<thead class="thead-dark">
<tr align="center">
<th scope="col">Id</th>
<th scope="col">Name</th>
<th scope="col">Designation</th>
<th scope="col">Edit</th>
<th scope="col">Delete</th>
</tr>
</thead>
<c:forEach var="emp" items="${list}">
<tbody>
<tr align="center">
<td>${emp.id}</td>
<td>${emp.name}</td>
<td>${emp.designation}</td>
<td><a href="editemp/${emp.id}" class="btn btn-outline-info">Edit</a></td>
<td><a href="deleteemp/${emp.id}" class="btn btn-outline-danger">Delete</a></td>
</tr>
</tbody>
</c:forEach>
</table>
<hr>
<!-- Pagination code will come here -->发布于 2019-09-11 13:02:32
是的是可能的。但是首先您必须创建一个PagingAndSortingRepository<T, I>存储库和一个控制器的接口,在您的情况下,我没有看到一个接口,您必须添加一个PagingAndSortingRepository<T, I>返回的页面、大小、元素、stc的属性,这样jsp页面就可以知道页面的属性等等,并且您可以像${page}一样使用它来显示页码。我指的是这个存储库。
雇员储存库:
public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Integer> {}PagingAndSortingRepository<T, I>有一个根据页面数据传递对象的findAll(page)方法。
雇员Dao:
@Service
public class EmpDao {
@Autowired
private EmpRepository repo;
public Page<Emp> getPage(Pageable pageable){
return repo.findAll(pageable);
}如果您想要根据页面的对象,那么您必须使用Page<T>接口,因为页面是对象列表的子列表。它允许获得关于它在包含整个列表中的位置的信息。
@Controller
public class EmpController {
@Autowired
private EmpDao dao;
@RequestMapping("/viewemp")
public String viewemp(Model m, Pageable pageable){
Page<Emp> pages=dao.getPage(pageable);
m.addAttribute("number", pages.getNumber());
m.addAttribute("totalPages", pages.getTotalPages());
m.addAttribute("totalElements", pages.getTotalElements());
m.addAttribute("size", pages.getSize());
m.addAttribute("data",pages.getContent());
return "viewemp";
}
}Pageable是分页信息的抽象接口。
getNumber()-返回当前片的数目。都是非阴性的。getTotalPages()-返回总页数。getTotalElements()-返回元素的总数。getSize()-返回切片的大小。getContent()-以列表的形式返回页面内容。Jsp页面假设您已经存储了数据。
只需将其写在表正文中,即<tbody>
<tbody id="myTable">
<c:choose>
<c:when test="${data.size() > 0 }">
<c:forEach var="emp" items="${data}">
<tr align="center">
<td>${emp.id}</td>
<td>${emp.name}</td>
<td>${emp.designation}</td>
<td><a href="editemp/${emp.id}" class="btn btn-outline-info">Edit</a></td>
<td><a href="deleteemp/${emp.id}" class="btn btn-outline-danger">Delete</a></td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr align="center">
<td colspan="5">No Users available</td>
</tr>
</c:otherwise>
</c:choose>
<c:if test="${data.size() > 0 }">
<div class="panel-footer">
Showing ${number+1} of ${size+1} of ${totalElements}
<ul class="pagination">
<c:forEach begin="0" end="${totalPages-1}" var="page">
<li class="page-item">
<a href="viewemp?page=${page}&size=${size}" class="page-link">${page+1}</a>
</li>
</c:forEach>
</ul>
</div>
</c:if>
</tbody>你可以走了..。
希望能帮上忙..。
发布于 2019-09-09 13:51:01
试一试:用EmployeeRepository扩展PagingAndSortingRepository。然后更改findall()方法类型PageRequest findAll(PageRequest pagerequest)。
public interface EmployeeRepository extends PagingAndSortingRepository<Emp, Integer> {
PageRequest<Emp> findAll(PageRequest pagerequest)
}发布于 2019-12-22 12:55:42
有一些方法可以通过这个例子来确定。
public class StudentRepository {
@PersistenceContext
private EntityManager entityManager;
public List<StudentEntity> listAll() {
Query query = entityManager.createQuery("from StudentEntity");
return query.getResultList();
}
}https://stackoverflow.com/questions/57854274
复制相似问题