我正在做一个模拟商店的练习,但是在屏幕上打印时,添加产品的选项不起作用。打印白标错误:
Whitelabel错误页面 此应用程序没有针对/ error的显式映射,因此您将其视为后备。 2019年3月30日星期六17:09:05 CET 发生意外错误(类型=内部服务器错误,状态= 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>
答案 0 :(得分:1)
是的,控制器在updateProduct中是错误的。代替:
model.addAttribute("producto", producto);
写:
model.addAttribute("producto1", producto);
因为在百里香中,您在th:object中将其引用为producto1而不是producto。