简体   繁体   English

Thymeleaf Spring Boot JPA无法从数据库获取数据,未检测到错误

[英]Thymeleaf spring boot jpa can't get data fom the dabase, no error detected

I'm working on a project using Spring Boot and I'm trying to integrate Thymeleaf to get information from the database. 我正在使用Spring Boot进行一个项目,并且试图集成Thymeleaf从数据库中获取信息。 It's the first time I use Thymeleaf. 这是我第一次使用Thymeleaf。

Here my entity class: 这是我的实体类:

package com.org.model;

import java.io.Serializable;
import javax.persistence.*;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;

import java.math.BigDecimal;
import java.util.List;


/**
 * The persistent class for the countries database table.
 * 
 */
@Entity
@Table(name="countries")
//@NamedQuery(name="Country.findAll", query="SELECT c FROM Country c")

public class Country implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="COUNTRY_ID")
    private String countryId;

    @Column(name="COUNTRY_NAME")
    private String countryName;

    //bi-directional many-to-one association to Region

    @ManyToOne
    @JoinColumn(name="REGION_ID")
    private Region region;

    //bi-directional many-to-one association to Location
    @JsonIgnore
    @OneToMany(mappedBy="country")
    private List<Location> locations;

    public Country() {
    }

    public String getCountryId() {
        return this.countryId;
    }

    public void setCountryId(String countryId) {
        this.countryId = countryId;
    }

    public String getCountryName() {
        return this.countryName;
    }

    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }

    public Region getRegion() {
        return this.region;
    }

    public void setRegion(Region region) {
        this.region = region;
    }

    public List<Location> getLocations() {
        return this.locations;
    }

    public void setLocations(List<Location> locations) {
        this.locations = locations;
    }

    public Location addLocation(Location location) {
        getLocations().add(location);
        location.setCountry(this);

        return location;
    }

    public Location removeLocation(Location location) {
        getLocations().remove(location);
        location.setCountry(null);

        return location;
    }

}

here is my controller: 这是我的控制器:

package com.org.controller;

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.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.org.model.Country;
import com.org.repository.CountryRepository;

    @Controller    // This means that this class is a Controller
@RequestMapping(path="/api", produces=MediaType.APPLICATION_JSON_VALUE) // This means that this class is a Controller

public class CountryController {
        @Autowired // This means to get the bean called userRepository
        // Which is auto-generated by Spring, we will use it to handle the data
    private CountryRepository countryRepository;



        @RequestMapping(value="/country", method= RequestMethod.GET)
        public String list(Model model){
            model.addAttribute("Country", countryRepository.findAll());


            // This returns a JSON or XML with the users
            return "countries";
        }


    //  @RequestMapping(path="/country/{countryId}")
    //    public @ResponseBody Country getCountry(@PathVariable String countryId) {
    //        return countryRepository.findOne(countryId);
    //    }
    }

I create a HTML file to display the data in a table: 我创建一个HTML文件以在表中显示数据:

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
    <head lang="en">

    </head>
    <body>
    <div class="container">
        <!--/*/ <th:block th:include="fragments/header :: header"></th:block> /*/-->

    <div th:if="${not #lists.isEmpty(countries)}">

            <table class="table table-striped">
                <tr>
                    <th>Country Id</th>
                    <th>Country Name</th>
                    <th>Region Id</th>
                    <th>Location</th>

                </tr>
                <tr th:ForEach="Country : ${countries}">
                    <td th:text="${Country.countryId}">id country</td>
                    <td th:text="${Country.countryName}">Country Name</td>
                    <td th:text="${Country.region}">Region Id</td>
                    <td th:text="${Country.locations}">Location</td>

                </tr>
            </table>

        </div>

    </div>

    </body>
    </html>

I added the Thymleaf dependency to the pom.xml 我将Thymleaf依赖项添加到pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>xxxx.org</groupId>
    <artifactId>project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>webService</name>
    <description>first project for university</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.6.1</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.6.1</version>
    <scope>compile</scope>
</dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
  <groupId>org.modelmapper</groupId>
  <artifactId>modelmapper</artifactId>
  <version>1.1.0</version>
</dependency>
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring4</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

I got no error but white screen no error in the console: 我没有错误,但是控制台中的白屏没有错误:

在此处输入图片说明

You added the modelAttribute with name "Country", but in Thymeleaf you try to call "countries" fix that by setting the modelAttribute to: 您添加了名称为“国家/地区”的modelAttribute,但是在Thymeleaf中,您尝试通过将modelAttribute设置为以下方式来调用“国家/地区”:

model.addAttribute("countries", countryRepository.findAll());

EDIT: 编辑:

Also change your thymeleaf to this. 也改变你的百里香。

<tr th:each="Country : ${countries}">

Check this list to see what names you can use. 检查此列表以查看可以使用的名称。 (if it doesn't automatically scroll to the chapter, it's 5.2 Setting value to specific attributes . (如果它没有自动滚动到该章节,则为5.2将值设置为特定属性

Just an idea but I had kind of similar issue, are you sure you are accessing your database and not one created at runtime using your Entity. 只是一个主意,但我遇到了类似的问题,您确定要访问数据库,而不是在运行时使用实体创建的数据库。

Check that countryRepository.findAll() is returning records. 检查countryRepository.findAll()是否正在返回记录。

似乎百里香不接受ForEach,我将其更改为每个,而他接受。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM