如何使用 Pageable 在 Spring Boot 和 Thymeleaf 中显示按点赞数排序的技能列表?
Posted
技术标签:
【中文标题】如何使用 Pageable 在 Spring Boot 和 Thymeleaf 中显示按点赞数排序的技能列表?【英文标题】:How to show a list of skills sorted by their number of likes in Spring Boot and Thymeleaf with Pageable? 【发布时间】:2020-09-12 09:09:05 【问题描述】:我正在尝试使用 Pageable 在 Spring Boot 和 Thymeleaf 中按点赞数排序技能列表,但我遇到了问题。我不确定该怎么做。解决这个问题的好方法是什么?
编辑。错误:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为“accountController”的bean时出错:通过字段“skillRepository”表示的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“skillRepository”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException: 无法为方法 public abstract java.util.List projekti.Skill.SkillRepository.findAllSkills(projekti.Account.Account,org.springframework.data.domain.Pageable) 创建查询!找不到类型 Skill 的属性 findAllSkills!
AccountController.java
@GetMapping("/profile/path")
public String profile(Model model, @PathVariable String path)
Account account = accountRepository.findByPath(path);
Pageable pageable = PageRequest.of(0, 5, Sort.by("likes").descending());
model.addAttribute("skills", skillRepository.findAllSkills(account, pageable));
return "profile";
技能.java
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Skill extends AbstractPersistable<Long>
@NotEmpty
@Size(min = 1, max = 50)
@Column
private String name;
@ManyToMany
@JoinTable(
name="who_liked",
joinColumns=
@JoinColumn(name="skill_id", referencedColumnName="id"),
inverseJoinColumns=
@JoinColumn(name="like_account_id", referencedColumnName="id"))
private List<Account> likes = new ArrayList<>();
SkillRepository.java
public interface SkillRepository extends JpaRepository<Skill, Long>
List<Skill> findAllSkills(Account account, Pageable pageable);
个人资料.html
<li th:each="skill : $skills">
<span th:text="$skill.name">skill</span>
<form th:action="@/profile/path/skill/id/like(path=$path, id=$skill.id)" method="POST">
<input type="hidden" id="skillLike" name="skillLike" value="skillLike"/>
<button type="submit"><span th:text="$#lists.size(skill.likes)">likes</span></button>
<span> likes</span>
</form>
</li>
【问题讨论】:
有什么问题? 我收到错误消息:“没有找到类型技能的属性 findAllSkills!”。在帖子中添加了完整的错误消息。 在我看来技能类中没有技能属性?方法名不应该是 findAll 吗? 这给了我错误:“No property findAll found for type Skill!”。 试试this 【参考方案1】:findAllSkills
在接口JpaRepository
中不存在,可以改为findAll
【讨论】:
这给了我错误:“No property findAll found for type Skill!”。以上是关于如何使用 Pageable 在 Spring Boot 和 Thymeleaf 中显示按点赞数排序的技能列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在spring boot中使用Pageable接口从http url中删除/处理不相关或错误的排序参数?
如何使用带有 Pageable 的 Spring Data JPA 分页来更改数据?
如何通过 Sort 和 Pageable 使用 Spring data JPA 开箱即用地查询数据?
如何记录Spring Boot JPA Pageable绑定值?
使用@RestController在Spring中进行分页,但不使用Spring Data Rest Pageable?