[JAVA] Implementieren Sie die Pagenierung mit SpringData Pageable + Thymeleaf

Zweck

・ Ich möchte den Listenbildschirm schön umblättern ・ Die Implementierung sollte so einfach wie möglich sein

Umgebung

SpringBoot 2.1.0.RELEASE Spring Data Commons 2.1.2.RELEASE https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Pageable.html

Implementierung

Configuration


import org.springframework.context.annotation.Configuration;
import org.springframework.data.web.PageableHandlerMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyAppWebConfig implements WebMvcConfigurer {

    @Override
    public void addArgumentResolvers(
            List<HandlerMethodArgumentResolver> argumentResolvers) {
        PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
        //Die maximale Anzahl der auf einer Seite angezeigten Elemente wurde auf 10 erhöht
        resolver.setMaxPageSize(10);
        argumentResolvers.add(resolver);
    }
}

Repository Ich habe JPA verwendet.


import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MyHistoryRepository
        extends PagingAndSortingRepository<MyHistory, Long> {

    Page<MyHistory> findByUserIdAndDeletedFalse(
            String userId, Pageable pageable);

}

Service


@Service
@Transactional(readOnly = true)
public class MyHistoryServiceImpl implements MyHistoryService {

    @Autowired
    MyHistoryRepository myHistoryRepository;

    public Page<MyHistoryModel> getMyHistoryByUserId(
            String userId, Pageable pageable) {
        //Konvertieren Sie die erworbene Entität in ein Modell und geben Sie sie zurück
        return myHistoryRepository
                .findByUserIdAndDeletedFalse(userId,
                        pageable)
                .map(MyHistoryConverter::entityToModel);
    }
}

Controller


@Controller
@RequestMapping("/mypage")
public class MypageController {

    @Autowired
    MyHistoryService myHistoryService;

    @GetMapping
    public String doGetMypage(@AuthenticationPrincipal MyUserDetails user,
            Model model, Pageable pageable) {
        model.addAttribute("myHistory", myHistoryService
                .getMyHistoryByUserId(user.getUserId(), pageable));
        return "view";
    }
}

View(Thymeleaf)

<!--Nur am Pager-->
<div th:unless="${myHistory.getContent().size()==0}" th:fragment='paginationbar'>
		<ul>
			<li th:class="${myHistory.first} ? 'disabled':''" style="display:inline">
				<span th:if="${myHistory.first}">first</span>
				<a th:if="${not myHistory.first}" th:href="@{${'/mypage'}(page=0)}">first</a>
			</li>
			<li th:each='i : ${#numbers.sequence(0, myHistory.totalPages-1)}' th:class="(${i}==${myHistory.number})? 'active' : ''" style="display:inline">
		<span th:if='${i}==${myHistory.number}' th:text='${i+1}'>1</span>
			<a th:if='${i}!=${myHistory.number}' th:href="@{${'/mypage'}(page=${i})}">
				<span th:text='${i+1}'>1</span>
			</a>
		</li>
		<li th:class="${myHistory.last} ? 'disabled':''" style="display:inline">
			<span th:if="${myHistory.last}">last</span>
			<a th:if="${not myHistory.last}" th:href="@{${'/mypage'}(page=(${myHistory.totalPages}-1))}">last</a>
		</li>
	</ul>
</div>

Impressionen

Ich konnte Pagenation leicht implementieren, indem ich Pageable passierte. Dieses Mal war das erworbene Unternehmen selbst auf die Seitennation ausgerichtet. Wenn Sie in dieser Implementierung in einem Feld der erworbenen Entität blättern können, Ich konnte fast ohne Änderungen am vorhandenen Quellcode damit umgehen, aber soweit ich das untersuchte, schien es unmöglich.

Recommended Posts

Implementieren Sie die Pagenierung mit SpringData Pageable + Thymeleaf
Implementieren Sie die Rails-Paginierung