为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以使用 JpaRepository<T, I> 在 jsp 中分页

是否可以使用 JpaRepository<T, I> 在 jsp 中分页

狐的传说 2023-07-19 16:24:55
我是 Spring Boot 新手,我有一个问题,是否可以在JSP中对表格进行分页JpaRepository<T, I>,我已经在互联网上搜索了两天但没有找到。查询结果主要针对Thymeleaf,但我不想使用thymeleaf。我知道如何在JSP中使用分页Jdbctemplate,但为此,我必须手动编写查询和页数。我已经编写了 Spring Boot 和 JSP 代码。员工存储库:public interface EmployeeRepository extends JpaRepository<Emp, Integer> {}员工控制器:@Controllerpublic 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";    }}索引.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 -->
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

对的,这是可能的。但首先你必须创建一个PagingAndSortingRepository<T, I>存储库和控制器的接口,在你的情况下我没有看到一个,你必须添加页面、大小、元素、stc 的属性,这些属性由返回的PagingAndSortingRepository<T, I>所以你的 jsp 页面将了解页面等属性,您可以使用它${page}来显示页码。我指的是这个存储库。


员工存储库:


public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Integer> {}

有PagingAndSortingRepository<T, I>一个findAll(page)根据页面数据传递对象的方法。


员工道:


@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分页信息的抽象接口

  1. getNumber()- 返回当前切片的编号。始终为非负数。

  2. getTotalPages()- 返回总页数。

  3. getTotalElements()- 返回元素的总数。

  4. getSize()- 返回切片的大小。

  5. 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>

你就可以走了..


希望能帮助到你..


查看完整回答
反对 回复 2023-07-19
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

通过这个例子可以确定一些方法。


public class StudentRepository {


    @PersistenceContext

    private EntityManager entityManager;


    public List<StudentEntity> listAll()  {

        Query query = entityManager.createQuery("from StudentEntity");

        return query.getResultList();

    }

}


查看完整回答
反对 回复 2023-07-19
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

试试这个:使用 PagingAndSortingRepository 扩展您的 EmployeeRepository。然后更改 findall() 方法类型 PageRequest findAll(PageRequest pagerequest)。


public interface EmployeeRepository extends PagingAndSortingRepository<Emp, Integer> {

    PageRequest<Emp> findAll(PageRequest pagerequest)

}


查看完整回答
反对 回复 2023-07-19
  • 3 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信