gpt4 book ai didi

java - 使用 Jpa 和 Thymeleaf 在 Spring Boot 中重定向页面

转载 作者:行者123 更新时间:2023-12-01 16:34:46 24 4
gpt4 key购买 nike

我正在创建一对多关系,其中类别有许多产品。列出我现有的所有类别后,我想查看特定类别中的所有产品,并对这些产品(来自该类别)进行基本的 CRUD。我发现在 Thymealeaf 中重定向页面时遇到困难,最确切地说,我无法使用 Thymeleaf 访问“添加产品”页面。

@Entity
@Table(name="category")
public class Category {

@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="id")
private long id;

@Column
@NotEmpty(message = "*Please provide a description")
private String description;

@OneToMany(mappedBy = "category")
private Set<Product> products;

public Category(){}
@Entity
@Table(name="product")
public class Product {

@Id
@Column(name="id")
private String id;

@Column
private String name;

@Column
private String description;

@Column
private float price;

@Column
private int discount;

@Column
private boolean isInStock;

@ManyToOne
@JoinColumn(name="category_id")
private Category category;

这是我在服务层保存产品的方法

 public Product save(Product product, long id) {
Category category = categoryRepository.getById(id);
if (category != null) {
product.setId(UUID.randomUUID().toString());
product.setCategory(category);
product.setInStock(false);
return productRepository.save(product);
} else {
throw new ResourceNotFoundException("Category not found with id: " + id);
}
}

在 Controller 中我有:

@Autowired
ProductService productService;

@GetMapping("/products/{categoryId}")
public String viewProducts(Model model, @PathVariable("categoryId") long categoryId) {
List<Product> productsList = productService.findByCategoryId(categoryId);
model.addAttribute("productsList", productsList);
model.addAttribute("categoryId",categoryId );
return "products";

}
@GetMapping("/newProduct/{categoryId}")
public String showAddForm(Model model,@PathVariable("categoryId") long categoryId) {
Product product = new Product();
model.addAttribute("product", product);
return "newProduct";
}

@PostMapping("/save/{categoryId}")
public String addProduct(@ModelAttribute("product") Product product, @PathVariable long categoryId){
productService.save(product, categoryId);
return "redirect:products";
}

我陷入困境的是,我无法使用路径变量categoryId从products.html重定向到newProduct.html(showAddForm方法应该返回)。它会将我重定向到一个错误页面,如果我手动输入categoryId在 URL 中,我终于到达了 newProduct.html。在 products.html 中,我有:

<body>
<div class="container my-2">
<div class="card">
<div class="card-body">
<!-- TODO get category ID from categories (parameters between HTML)-->
<div th:switch="${productsList}" class="container my-5">

<p class="my-5">
<a href="/product/newProduct/" class="btn btn-primary">Add product</a>
</p>
<div class="col-md-10">
<h2 th:case="null">No Products yet!</h2>
<div th:case="*">
<table class="table table-striped table-responsive-md">
<thead>
<tr>
<th>Name</th>
<th>Description</th>
<th>Price</th>
<th>Discount</th>
<th>IsInStock</th>
<th>Edit</th>
<th>Delete</th>
</tr>
</thead>
<tbody>
<tr th:each="product : ${productsList}">
<td th:text="${product.name}"></td>
<td th:text="${product.description}"></td>
<td th:text="${product.discount}"></td>
<td th:text="${product.price}"></td>
<td th:text="${product.isInStock}"></td>
<td><a th:href="@{/product/edit/{id}(id=${product.id})}" class="btn btn-primary"></a></td>
<td><a th:href="@{/product/delete/{id}(id=${product.id})}" class="btn btn-primary"></a></td>
</tr>
</tbody>
</table>
</div>

</div>
</div>
</div>
</div>
</div>
</body>

</html>

最佳答案

我看到的问题是,路径为 @GetMapping("/newProduct/{categoryId}")showAddForm 代码需要一个未发送的 catgoryID在上面的添加产品按钮中。由于您在 model.addAttribute("categoryId",categoryId ); 行中传递了categoryId,因此您可以在 href 元素中使用它。因此,该链接应该类似于

<p class="my-5">
<a th:href="@{/product/newProduct(categoryId=${categoryId})}" class="btn btn-primary">Add product</a>
</p>

但是由于在方法 showAddForm 中未使用categoryID,因此您可以将其删除。并尝试类似的东西

<p class="my-5">
<a th:href="@{/product/newProduct}" class="btn btn-primary">Add product</a>
</p>

关于java - 使用 Jpa 和 Thymeleaf 在 Spring Boot 中重定向页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61982644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com