【问题标题】:How to search by ID an OBJ with Spring MVC and Thymeleaf?如何使用 Spring MVC 和 Thymeleaf 按 ID 搜索 OBJ?
【发布时间】:2020-12-03 01:04:38
【问题描述】:

我正在学习 Spring MVC 和 Thymeleaf,目前我可以创建一个页面来创建一个 OBJ 并将其保存在我的数据库中,我也可以列出所有 obj 并将其显示在页面上。

我想做的是能够在页面中引入和id并搜索匹配的id OBJ并将其显示在屏幕上。

这是我的实体:

@Entity
public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
int dni;
String name;
String surname;


public int getDni() {
    return dni;
}
public void setDni(int dni) {
    this.dni = dni;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getSurname() {
    return surname;
}
public void setSurname(String surname) {
    this.surname = surname;
}

这是我的存储库:

package com.demolorenzo.user;

import java.util.List;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends CrudRepository<User, String> {
    List<User>findAll();
    List<User>findByName(String name);
    List<User>findByDni(int dni);
    
}

还有我的控制器:

package com.demolorenzo.user;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class DemoController {

    @Autowired
    UserRepository userrepo;
    
    
    @GetMapping("/Home")
    public String userForm(Model model) {
        model.addAttribute("user", new User());
        return "Home";
    }
    
    @PostMapping("/Home")
    public String userSubmit(@ModelAttribute User user, Model model) {
        model.addAttribute("user", user);
        userrepo.save(user);
        return "users";
    }
    
    @GetMapping("/search")
    public String searchForm(Model model) {
        model.addAttribute("user", new User());
        return "search";
    }
    
    @PostMapping("/search")
    public String searchSubmit(@ModelAttribute User user, Model model) {
        model.addAttribute("user", userrepo.findByDni(user.getDni()));
        return "users";
    }
    
    
}

这是视图(/搜索):

<form action="#" th:action="@{/search}" th:object="${user}" method="post">

      <p> DNI: <input type="number" th:field="*{dni}"/> </p>

      <p> <input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>   
        
    </form>

最后一个视图(/users):

<h1>Result</h1>
    <p th:text="'Dni: ' + ${user.dni}" />
    <p th:text="'Name: ' + ${user.name}" />
    <p th:text="'Surname: ' + ${user.surname}" />
    <a href="/Home">Submit another message</a>

这是我得到的错误:

org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'dni' cannot be found on object of type 'java.util.ArrayList' - maybe not public or not valid?

【问题讨论】:

    标签: java spring spring-boot spring-mvc thymeleaf


    【解决方案1】:

    您的视图正在尝试访问user 对象的dni 属性:

    <p th:text="'Dni: ' + ${user.dni}" />
    

    但是,在控制器中,你正在做:

    @PostMapping("/search")
    public String searchSubmit(@ModelAttribute User user, Model model) {
        model.addAttribute("user", userrepo.findByDni(user.getDni()));
        return "users";
    }
    

    您将userrepo.findByDni() 方法的结果添加为user。但该方法返回一个List&lt;User&gt;,而不是单个用户。

    所以视图中的userList&lt;User&gt;,它显然没有dni 属性。

    例如,您应该更新控制器方法以将存储库方法的结果放入变量users 中。并使用th:each 遍历这些用户。

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 2016-03-14
      • 2017-05-09
      • 1970-01-01
      • 2016-03-13
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多