コントローラは大丈夫ですか?1つのテンプレートの解析中にエラーが発生しましたが、他のテンプレートは正常に機能しています

Tilan04

ストアをシミュレートする演習に取り組んでいますが、画面に印刷するときに製品を追加するオプションが機能しません。ホワイトラベルエラーを印刷します。

ホワイトラベルエラーページこのアプリケーションには/ 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>
IvanM

ええ、コントローラーはupdateProductで悪いです。の代わりに:

 model.addAttribute("producto", producto);

書く:

 model.addAttribute("producto1", producto);

thymeleafでは、th:objectでproductoではなくproducto1として参照しているためです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ