我想在Spring Boot + Spring Data JPA App中添加分页功能,我有"false"
:
Repository
在@Repository
public interface PostRepository extends JpaRepository<Post, Long> {
List<Post> findAllByOrderByPostIdDesc(Pageable pageable);
}
类中,我有:
Service
最后@Service
public class PostService {
@Autowired
private PostRepository postRepository;
public List<Post> findAll(Pageable pageable) {
return postRepository.findAllByOrderByPostIdDesc(pageable);
}
}
是
Controller
上面在@Controller
public class HomeController {
@Autowired
private PostService postService;
@GetMapping(value = "/")
public String getHomePage(Model model, Pageable pageable){
model.addAttribute("postList", postService.findAll(pageable));
return "home";
}
}
映射上的代码获得了所有记录作为响应,但是如果我以http://localhost:8080
的形式传递page
和size
参数,则可以进行分页。
现在,我想将http://localhost:8080/?page=0&size=1
设置为默认的着陆页地址,并在HTML代码中如何动态更新参数http://localhost:8080/?page=0&size=1
和page
的值,即:
size
我尝试了很多技巧,但没有一个对我有用!
我尝试并根据建议添加了此类,但是@Nyle Hassan,
<ul class="pagination justify-content-center mb-4">
<li class="page-item">
<a class="page-link" th:href="@{/(page=0,size=1)}">← Older</a>
</li>
<li class="page-item disabled">
<a class="page-link" th:href="@{/(page=0,size=1)}">Newer →</a>
</li>
</ul>
它导致了:
@Configuration
public class DefaultView extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers( ViewControllerRegistry registry ) {
registry.addViewController( "/" ).setViewName( "forward:/?page=0&size=10" );
registry.setOrder( Ordered.HIGHEST_PRECEDENCE );
super.addViewControllers( registry );
}
}
答案 0 :(得分:3)
上面http://localhost:8080映射上的代码我得到了所有记录作为响应
您确定吗?您正在使用哪个版本的Spring Boot?我检查了最新版本(2.1.1),并且在不使用任何查询参数的情况下调用http://localhost:8080将实例化一个Pageable对象,其页面= 0,大小= 20,无排序。只需尝试将调试点设置为org.springframework.data.web.PageableHandlerMethodArgumentResolver#resolveArgument
即可了解Spring如何执行此绑定。
此参数解析器还附带一个注释,当您不存在查询参数时,该注释可让您更改使用的默认值。您可以像这样使用它:
@GetMapping(value = "/")
public String getHomePage(Model model, @PageableDefault(page=0, size = 1) Pageable pageable) {
...
}
第0页是注释的默认设置,因此具有相同的效果:
@GetMapping(value = "/")
public String getHomePage(Model model, @PageableDefault(size = 1) Pageable pageable) {
...
}
在HTML代码中,如何动态更新参数页面和大小的值
下一次,请发表两个单独的问题,但问题就在这里:
首先,在存储库和服务中将List<Post>
更改为Page<Post>
。在您的控制器中,将结果绑定到模型:
Page<Post> page = postService.findAll(pageable);
model.addAttribute("page", page); // page.getContent() contains the List<Page> now
然后在视图中,使用page
渲染分页链接,例如像这样:
<li class="page-item">
<a class="page-link" th:if="${page.hasPrevious()}" th:href="@{/(page=${page.previousPageable().getPageNumber()},size=${page.getSize()})}">← Older</a>
</li>
<li class="page-item disabled">
<a class="page-link" th:if="${page.hasNext()}" th:href="@{/(page=${page.nextPageable().getPageNumber()},size=${page.getSize()})}">Newer →</a>
</li>