・ Ich möchte den Listenbildschirm schön umblättern ・ Die Implementierung sollte so einfach wie möglich sein
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
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>
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.