【发布时间】:2019-12-28 23:39:48
【问题描述】:
尝试从 Thymeleaf 模板文件中发出删除 http 请求
来自模板:
<tr th:each="ingredient : ${listIngredients}">
<td th:text="${ingredient.id}">IngredientID</td>
<td th:text="${ingredient.name}">Name</td>
<td th:text="${ingredient.description}">Description</td>
<!-- <td th:text="${ingredient.img}">Img</td>
<td th:text="${ingredient.ingredients}">Ingredients</td>
<td th:text="${ingredient.preparation}">Preparation</td> -->
<td>
<!-- <a th:href="@{'/edit/' + ${ingredient.id}}">Edit</a>
-->
<form th:object="${ingredient}" th:action="@{'/ingredients/' + ${ingredient.id}}" th:method="delete">
<button type="submit">Delete</button>
</form>
</td>
</tr>
来自我的控制器:
@DeleteMapping("/ingredients/{ingredientId}")
public String deleteIngredient(@PathVariable Long ingredientId, @ModelAttribute("ingredient") Ingredient ingredient){
ingredientRepository.delete(ingredient);
return "redirect:../../";
}
带有保存按钮的表单模板:
<form action="#" th:action="@{/ingredients/ingredient/new/save}" th:object="${ingredient}"
method="post">
<table border="0" cellpadding="10">
<tr>
<td>Ingredient Name:</td>
<td><input type="text" th:field="*{name}" /></td>
</tr>
<tr>
<td>Description:</td>
<td><input type="text" th:field="*{description}" /></td>
</tr>
<!-- <tr>
<td>Tags:</td>
<td><input type ="text" th:field="*{tags}" /></td>
</tr> -->
<tr>
<td colspan="2"><button type="submit">Save</button> </td>
控制器中的保存方法:
@RequestMapping(value = "/ingredient/new/save", method = RequestMethod.POST)
public String saveIngredient(@ModelAttribute("ingredient") Ingredient ingredient){
ingredientRepository.save(ingredient);
return "redirect:../../";
}
成分实体:
package com.donovanuy.mixmix.entities;
import java.util.*;
import javax.persistence.*;
@Entity
@Table(name = "ingredients_master")
public class Ingredient extends AuditModel{
@Column(name = "ingredient")
private String name;
@Column(name="description")
private String description;
@Id
@GeneratedValue
private long id;
// public Ingredient(String n, String d){
// this.setName(n);
// this.setDescription(d);
// }
// public Ingredient(int id, String n, String d){
// this.setId(id);
// this.setName(n);
// this.setDescription(d);
// }
@ManyToMany(mappedBy = "ingredients")
Set<UserRecipe> recipes;
@ManyToMany
Set<Tag> tags;
// Setters
}
更新
现在一切都按预期工作,我将 DELETE 请求隐藏在模板文件中,并在我的存储库中创建了一个 deleteById 方法。
表格
<form th:action="@{'/ingredients/ingredient/' + ${ingredient.id}}" th:method="POST">
<input type="hidden" name ="_method" value="DELETE" />
<button type="submit">Delete</button>
</form>
控制器:
@DeleteMapping("/ingredients/ingredient/{ingredientId}")
public String deleteIngredient(@PathVariable Long ingredientId){
ingredientRepository.deleteById(ingredientId);
return "redirect:../";
}
存储库:
import org.springframework.data.jpa.repository.JpaRepository;
import com.donovanuy.mixmix.entities.Ingredient;
import java.util.List;
public interface IngredientRepository extends JpaRepository<Ingredient, Long> {
List<Ingredient> findAllById(Long id);
public void deleteById(Long Id);
}
【问题讨论】:
-
请显示有关
Ingredient的更多详细信息。
标签: java hibernate orm spring-data-jpa thymeleaf