首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用JpaRepository<T、I>在jsp中分页?

问是否可以使用JpaRepository<T、I>在jsp中分页?
EN

Stack Overflow用户
提问于 2019-09-09 12:41:15
回答 3查看 1.7K关注 0票数 1

我刚开始玩春靴,

我有一个问题,是否可以用JpaRepository<T, I>在JSP中分页,我已经在网上搜索了两天,但还没有找到一个。查询结果主要是针对Thymeleaf的,但我不想使用百里香。我知道如何使用JSP使用Jdbctemplate分页,但为此,我必须手动编写查询和页数。我已经编写了一个spring引导& JSP代码。

EmployeeRepository:

代码语言:javascript
复制
public interface EmployeeRepository extends JpaRepository<Emp, Integer> {}

EmployeeController:

代码语言:javascript
复制
@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

代码语言:javascript
复制
<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 -->
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-11 13:02:32

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

雇员储存库:

代码语言:javascript
复制
public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Integer> {}

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

雇员Dao:

代码语言:javascript
复制
@Service
public class EmpDao {

    @Autowired
    private EmpRepository repo;

    public Page<Emp> getPage(Pageable pageable){
        return repo.findAll(pageable);
    }

如果您想要根据页面的对象,那么您必须使用Page<T>接口,因为页面是对象列表的子列表。它允许获得关于它在包含整个列表中的位置的信息。

代码语言:javascript
复制
@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>

代码语言:javascript
复制
<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>

你可以走了..。

希望能帮上忙..。

票数 3
EN

Stack Overflow用户

发布于 2019-09-09 13:51:01

试一试:用EmployeeRepository扩展PagingAndSortingRepository。然后更改findall()方法类型PageRequest findAll(PageRequest pagerequest)。

代码语言:javascript
复制
public interface EmployeeRepository extends PagingAndSortingRepository<Emp, Integer> {
    PageRequest<Emp> findAll(PageRequest pagerequest)
}
票数 0
EN

Stack Overflow用户

发布于 2019-12-22 12:55:42

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

代码语言:javascript
复制
public class StudentRepository {

    @PersistenceContext
    private EntityManager entityManager;

    public List<StudentEntity> listAll()  {
        Query query = entityManager.createQuery("from StudentEntity");
        return query.getResultList();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57854274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档