我对分页完全陌生,一无所知。从来没有使用它。有人告诉我,使用“规范”来使用分页和其他东西很容易而且很好。现在,我已经成功实现了我的规范,但是我不知道分页如何工作以及如何将其应用到前端。
通常我有一个列表,显示数据库中的所有内容。但是当我使用分页对象时,我需要有一个Page,所以我将列表更改为Page。
直到现在我一直在尝试:
SearchController:
public class SucheController {
@Autowired
private TelefonbuchRepository telefonbuchRepository;
private Page<Telefonbuch> eintraege;
private Telefonbuch telefonbuch = new Telefonbuch();
public void search(String vorname, String nachname, String telefonnummer, String handynummer) {
if (!vorname.isEmpty()) {
eintraege = telefonbuchRepository.findAll(TelefonbuchSpecifications.hasVorname(vorname), PageRequest.of(0, 5));
}
我找不到确切的教程,因此我只是尝试通过我的规范和Pagination元素。当我搜索错误时:
javax.el.PropertyNotFoundException: Property [id] not found on type [org.springframework.data.domain.PageImpl]
如何正确执行?您知道与此相关的任何教程或网站吗?我什至不知道我是否可以在前端显示Page对象。我正在将JSF与xhtml文件一起使用。如果您需要更多信息,请告诉我。
编辑: suche.xhtml根据要求:
<p:dataTable id="table" var="telefonbuch" value="#{sucheController.eintraege}" stickyHeader="true" resizableColumns="true" liveResize="true" style="margin-bottom:20px" paginator="true" rows="10" emptyMessage="Keine Telefonbucheinträge vorhanden" selection="#{telefonbuchList.selectedEntry}" selectionMode="single" rowKey="#{telefonbuch.id}"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
rowsPerPageTemplate="10,20,30">
我现在在第一行的结尾看到了telefonbuch.id。
答案 0 :(得分:0)
通过确保存储库扩展了JpaSpecificationExecutor
并调用findAll(Specification, Pageable)
方法,您可以正确实施规范
但是,此方法返回一个Page<TelefonBuch>
对象,该对象已分配给名为eintraege
的字段。从您发布的异常来看,您似乎试图在id
之上直接获取名为eintraege
的属性,因此我假设您在JSF代码中有类似${eintraege.id}
的内容,但该方法不起作用,因为它没有id
属性。
您可能想要做的是循环遍历eintraege
中的所有对象,并显示每个对象的ID。这意味着您可能需要执行以下操作:
<c:forEach var="telefonbuch" items="#{eintraege.content}">
<h:outputText value="#{telefonbuch.id}" />
</c:forEach>
这里发生的是我们在eintraege.getContent()
上循环,该循环返回可以迭代的集合。然后,您应该将每个对象分配给一个变量(例如telefonbuch
),然后可以调用诸如#{telefonbuch.id}
之类的属性。