ストアをシミュレートする演習に取り組んでいますが、画面に印刷するときに製品を追加するオプションが機能しません。ホワイトラベルエラーを印刷します。
ホワイトラベルエラーページこのアプリケーションには/ errorの明示的なマッピングがないため、これはフォールバックと見なされます。Sat Mar 30 17:09:05 CET 2019予期しないエラーが発生しました(type = Internal Server Error、status = 500)。テンプレートの解析中にエラーが発生しました(テンプレート: "クラスパスリソース[templates / producto.html]")
モデル内の参照を改善しようとし、名前をいくつかのパラメーターに変更しましたが、同じエラーが発生し続けました。
これがコントローラーです。
@Controller
public class ProductController {
@Autowired
ProductService productService;
@GetMapping (value = "/addProduct")
public String addProduct (Model model) {
model.addAttribute("producto", new Product ());
return "producto";
}
@GetMapping (value = "/deleteProduct")
public String deleteProduct (Model model, @RequestParam Integer idProduct) {
productService.deleteProduct(idProduct);
return "redirect:/list-productos";
}
@GetMapping (value = "/updateProduct")
public String updateProduct (Model model, @RequestParam Integer idProduct) {
Product producto = productService.getProductById(idProduct);
model.addAttribute("producto", producto);
return "producto";
}
@PostMapping (value = "/addProduct")
public String addProduct (Model model, String nombre, String descripcion, String marca, float precio) {
productService.addProduct(nombre, descripcion, marca, precio);
return "redirect:/list-productos";
}
@PostMapping (value = "/updateProduct")
public String updateProduct (Model model, Product producto) {
productService.updateProduct(producto);
return "redirect:/list-productos";
}
}
これがサービスです。
public interface ProductService {
List<Product> getAll();
Product getProductById(Integer idProduct);
void addProduct(String nombre, String descripcion, String marca, float precio);
void addProduct(Product product);
void updateProduct(Product product);
void deleteProduct(Integer idProduct);
}
これが実装です。
@Service
public class ProductServiceImpl implements ProductService {
@Autowired
ProductRepository productRepository;
@Override
public List<Product> getAll() {
return productRepository.findAll();
}
@Override
public void addProduct(String nombre, String descripcion, String marca, float precio) {
Product producto = new Product(nombre, descripcion, marca, precio);
productRepository.save(producto);
}
@Override
public void addProduct(Product product) {
productRepository.save(product);
}
@Override
public void updateProduct(Product product) {
productRepository.save(product);
}
@Override
public void deleteProduct(Integer idProduct) {
Optional<Product> producto = productRepository.findById(idProduct);
if (producto.isPresent()) {
productRepository.deleteById(idProduct);
}
}
@Override
public Product getProductById(Integer id) {
return productRepository.getOne(id);
}
}
これがモデルです
@Entity
@Table (name = "product")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column (name = "idProduct")
private Integer idProduct;
@Column (name = "nombre")
private String nombre;
@Column (name = "descripcion")
private String descripcion;
@Column (name = "marca")
private String marca;
@Column (name = "precio")
private float precio;
@OneToMany(mappedBy = "producto")
private Set<OrderLine> orderLines;
public Product() {
}
public Product(String nombre, String descripcion, String marca, float precio) {
super();
this.nombre = nombre;
this.descripcion = descripcion;
this.marca = marca;
this.precio = precio;
}
public Integer getIdProduct() {
return idProduct;
}
public void setId(Integer idProduct) {
this.idProduct = idProduct;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public float getPrecio() {
return precio;
}
public void setPrecio(float precio) {
this.precio = precio;
}
}
これはHTMLのフォームです。
<form th:action="@{/addProduct}" th:object="${producto}"
method="post">
<div class="form-group">
<label for="nombre" class="control-label">Nombre</label> <input
id="nombre" class="form-control" th:field="*{nombre}" />
</div>
<div class="form-group">
<label for="descripcion" class="control-label">Descripción</label>
<input id="descripcion" class="form-control"
th:field="*{descripcion}" />
</div>
<div class="form-group">
<label for="marca" class="control-label">Marca</label> <input
id="marca" class="form-control" th:field="*{marca}" />
</div>
<div class="form-group">
<label for="precio" class="control-label">Precio</label> <input
id="precio" class="form-control" th:field="*{precio}" />
</div>
<div class="form-group">
<button type="submit" class="btn btn-success">Añadir
producto</button>
</div>
</form>
ええ、コントローラーはupdateProductで悪いです。の代わりに:
model.addAttribute("producto", producto);
書く:
model.addAttribute("producto1", producto);
thymeleafでは、th:objectでproductoではなくproducto1として参照しているためです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加