Я пишу небольшое веб-приложение для обучения с использованием Spring Boot и Thymeleaf. Поэтому у меня есть 2 MySQL таблицы, которые я использую, Transcription и First_Language. Если я нажму на указанную кнопку c указанного элемента c в моем индексе. Страница html, которая является страницей внешнего интерфейса моего объекта first_language, я хочу распечатать элемент Transcription.Name. Однако я не являюсь уверен, как это сделать. Моя идея состояла в том, чтобы я дал контроллер first_language, FirstLanguageController, репозитории First_Language, а также Transcription. В моей таблице транскрипции MySql есть внешний ключ, ссылающийся на идентификатор первичного ключа First_Language. Поэтому я использую метод findByID () в TranscriptionRepository, чтобы найти эквивалентные идентификаторы в First_Language и Transcription. Кажется, что мой метод находит элемент в таблице транскрипций, но не возвращает его успешно. Моя главная страница интерфейса выглядит следующим образом:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>Users</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
crossorigin="anonymous"
/>
<link
rel="stylesheet"
href="https://use.fontawesome.com/releases/v5.4.1/css/all.css"
integrity="sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz"
crossorigin="anonymous"
/>
<link rel="stylesheet" href="../css/shards.min.css" />
</head>
<body>
<div th:switch="${users}" class="container my-5">
<div class="row">
<div class="col-md-6">
<h2 th:case="null">No users yet!</h2>
<div th:case="*">
<h2 class="my-5">Search for Users by Name</h2>
<form action="#" method="get" th:action="@{/search}">
<input
type="text"
class="form-control"
id="department"
name="department"
th:value="${department}"
placeholder="Department"
/>
<tr>
Search for User by department
</tr>
<div class="row">
<div class="col-md-6 mt-5">
<input
type="submit"
class="btn btn-primary"
value="Search Users"
/>
</div>
</div>
</form>
<p class="my-5">
<a href="/signup" class="btn btn-primary"
><i class="fas fa-user-plus ml-2"></i
></a>
</p>
<h2 class="my-5">Dictionary</h2>
<table class="table table-striped table-responsive-md">
<thead>
<tr>
<th>Russian Name</th>
<th>Type of Word</th>
<th>Knowledge Transcription</th>
<th>Knowledge German Word</th>
<th>Change</th>
<th>Delete</th>
<th>Show Transcription</th>
</tr>
</thead>
<tbody>
<tr th:each="user : ${users}">
<td th:text="${user.name}"></td>
<td th:text="${user.department}"></td>
<td th:text="${user.knowledge_transcription}"></td>
<td th:text="${user.knowledge_gerword}"></td>
<td>
<a
th:href="@{/edit/{id}(id=${user.id})}"
class="btn btn-primary"
><i class="fas fa-user-edit ml-2"></i
></a>
</td>
<td>
<a
th:href="@{/delete/{id}(id=${user.id})}"
class="btn btn-primary"
><i class="fas fa-user-times ml-2"></i
></a>
</td>
<td>
<form method="get" th:action="@{/showTranscription/{id}(id=${user.id})}" th:object="${transctiption}">
^ <input class="form-control"
type="text"
th:name="name"
th:value="${transcription}"/>
<div class="col-md-6 mt-5">
<input
type="submit"
class="btn btn-primary"
value="Show transcription"
/>
</div>
</form>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</body>
</html>
Я полагаю, у меня ошибка в методе формы, который должен активировать метод showTranscription. Мой контроллер выглядит следующим образом:
package com.alexander.mainstuff.controllers;
import com.alexander.mainstuff.entities.First_language;
import com.alexander.mainstuff.entities.Transcription;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.persistence.Entity;
import javax.validation.Valid;
import java.util.List;
import com.alexander.mainstuff.repositories.FirstLanguageRepository;
import com.alexander.mainstuff.repositories.TranscriptionRepository;
@Controller
public class FirstLanguageController {
private final FirstLanguageRepository userRepository;
private final TranscriptionRepository transcriptionRepository;
@Autowired
public FirstLanguageController(FirstLanguageRepository userRepository, TranscriptionRepository transcriptionRepository) {
this.userRepository = userRepository;
this.transcriptionRepository = transcriptionRepository;
}
@GetMapping("/signup")
public String showSignUpForm( @ModelAttribute("user") First_language user) {
return "add-user";
}
@PostMapping("/adduser")
public String addUser(@Valid @ModelAttribute("user") First_language user, BindingResult result, Model model) {
if (result.hasErrors()) {
return "add-user";
}
userRepository.save(user);
model.addAttribute("users", userRepository.findAll());
return "redirect:/";
}
@GetMapping("/")
public String showIndex(Model model) {
model.addAttribute("users", userRepository.findAll());
return "index";
}
@GetMapping("/edit/{id}")
public String showUpdateForm(@PathVariable("id") long id, Model model) {
First_language user = userRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid user Id:" + id));
model.addAttribute("user", user);
return "update-user";
}
@GetMapping("/search")
public String searchUser(@RequestParam (name = "department", required = false) String department, Model model) {
if (department == null || department.isEmpty()) {
model.addAttribute("users", userRepository.findAll());
} else {
model.addAttribute("users", userRepository.findByDepartment(department));
}
model.addAttribute("department", department);
return "index";
}
@GetMapping("/showTranscription/{id}")
public String findTranscription(@PathVariable("id") long id_trans , Model model) {
Transcription trans = transcriptionRepository.findById(id_trans).orElseThrow(() -> new IllegalArgumentException("Invalid user Id:" + id_trans));
String trans_name = trans.getName();
model.addAttribute("transcript", trans_name);
return "index";
}
@PostMapping("/update/{id}")
public String updateUser(@PathVariable("id") long id, @Valid First_language user, BindingResult result, Model model) {
if (result.hasErrors()) {
user.setId(id);
return "update-user";
}
userRepository.save(user);
model.addAttribute("users", userRepository.findAll());
return "index";
}
@GetMapping("/delete/{id}")
public String deleteUser(@PathVariable("id") long id, Model model) {
System.out.println("ID:" + id);
First_language user = userRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid user Id:" + id));
userRepository.delete(user);
model.addAttribute("users", userRepository.findAll());
return "index";
}
}
Мои сущности Transcription и First_Language следующие:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.alexander.mainstuff.entities;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.validation.constraints.NotBlank;
@Entity
public class Transcription {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private long id_first;
private long id_german;
private String name;
private int knowledge_transcription;
private int knowledge_gerword;
public Transcription() {}
public Transcription(long id, long id_first, long id_german, String name, int knowledge_transcription, int knowledge_gerword) {
this.id = id;
this.id_first = id_first;
this.id_german = id_german;
this.name = name;
this.knowledge_transcription = knowledge_transcription;
this.knowledge_gerword = knowledge_gerword;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getId_first() {
return id_first;
}
public void setId_first(long id_first) {
this.id_first = id_first;
}
public long getId_german() {
return id_german;
}
public void setId_german(long id_german) {
this.id_german = id_german;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKnowledge_transcription() {
return knowledge_transcription;
}
public void setKnowledge_transcription(int knowledge_transcription) {
this.knowledge_transcription = knowledge_transcription;
}
public int getKnowledge_gerword() {
return knowledge_gerword;
}
public void setKnowledge_gerword(int knowledge_gerword) {
this.knowledge_gerword = knowledge_gerword;
}
@Override
public String toString() {
return "Transcription{" + "id=" + id + ", id_first=" + id_first + ", id_german=" + id_german + ", name=" + name + ", knowledge_transcription=" + knowledge_transcription + ", knowledge_gerword=" + knowledge_gerword + '}';
}
}
package com.alexander.mainstuff.entities;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.validation.constraints.NotBlank;
@Entity
public class First_language {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@GeneratedValue(strategy = GenerationType.AUTO)
private long idsecond;
@GeneratedValue(strategy = GenerationType.AUTO)
private long idtrans;
@NotBlank(message = "Wwedite russkoye slovo")
private String name;
@NotBlank(message = "Wwedite tip slova")
private String department;
private int knowledge_transcription;
private int knowledge_gerword;
public First_language() {}
public First_language(long id, long idsecond, long idtrans, String name, String department, int knowledge_transcription, int knowledge_gerword) {
this.id = id;
this.idsecond = idsecond;
this.idtrans = idtrans;
this.name = name;
this.department = department;
this.knowledge_transcription = knowledge_transcription;
this.knowledge_gerword = knowledge_gerword;
}
@Override
public String toString() {
return "First_language{" + "id=" + id + ", idsecond=" + idsecond + ", idtrans=" + idtrans + ", name=" + name + ", department=" + department + ", knowledge_transcription=" + knowledge_transcription + ", knowledge_gerword=" + knowledge_gerword + '}';
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getIdsecond() {
return idsecond;
}
public void setIdsecond(long idsecond) {
this.idsecond = idsecond;
}
public long getIdtrans() {
return idtrans;
}
public void setIdtrans(long idtrans) {
this.idtrans = idtrans;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public int getKnowledge_transcription() {
return knowledge_transcription;
}
public void setKnowledge_transcription(int knowledge_transcription) {
this.knowledge_transcription = knowledge_transcription;
}
public int getKnowledge_gerword() {
return knowledge_gerword;
}
public void setKnowledge_gerword(int knowledge_gerword) {
this.knowledge_gerword = knowledge_gerword;
}
}
Итак, в конце я хочу распечатать поле транскрипции. имя в текстовом поле в индексе. html, рядом с кнопкой, с которой я запускаю метод showTranscription (). Вместо этого он возвращает мне индекс моей страницы. html и написан большими "нет записей". Так выглядит index. html, если в моей таблице MYSql first_language нет записей. Тем не менее, это не может быть правдой, потому что моя таблица впоследствии все еще не пуста. У кого-нибудь есть идеи, как решить мою проблему?