我正在使用Spring MVC + Hibernate开发Webapp。我收到警告
WARN [org.springframework.web.servlet.PageNotFound] (default task-1) No mapping for GET /ProjectFE/deleteproducts/
这是我的Controller映射删除产品代码:
@DeleteMapping(value="/deleteproducts/{productId}")
public String deleteProduct(@PathVariable("productId")int productId) {
IProductsDAO ip = new ProductsDAOImpl();
boolean b = ip.deleteProduct(productId);
if(b)
return "success";
else
return "deleteproducts";
}
jsp视图:
<body>
<form id="update product form" action="${pageContext.request.contextPath}/deleteproducts" style="display: none;">
<div class="form-group row">
<label for="product Id" class="col-sm-2 col-form-label">Id</label>
<div class="col-sm-10">
<input type="text" name="productId" class="form-control" id="productId" placeholder="Enter the product Id you want to delete">
<button class="btn btn-default" type="submit">
<span class="glyphicon glyphicon-search"></span>
</button>
</div>
</div>
</form>
</body>
DAOImplementation用于删除方法的调用:
public boolean deleteProduct(int productId)
{
boolean b = true;
try
{
sess.beginTransaction();
Products p = (Products)sess.load(Products.class, new Integer(productId));
sess.delete(p);
sess.getTransaction().commit();
}catch(Exception ex)
{
sess.getTransaction().rollback();
b = false;
}
return b;
}
是否由于/{productId}
部分而发生此问题?请一些帮助!
谢谢。
答案 0 :(得分:1)
首先,创建一个控制器以转到deleteproduct.jsp
页面。因此,编写类似
@GetMapping(value="/delete")
public String deleteProduct() {
return "deleteproducts";
}
因此,按/delete
进入页面,然后根据需要进行操作。
将您的@DeleteMapping
更改为@GetMapping
。并使用@RequestParam
代替@PathVariable
。因此,您的控制器将类似于
@GetMapping(value="/deleteproducts")
public String deleteProduct(@RequestParam(value="productId")String productId) {
IProductsDAO ip = new ProductsDAOImpl();
boolean b = ip.deleteProduct(Integer.parseInt(productId));
if(b)
return "success";
else
return "deleteproducts";
}
然后像
那样编写表格 <form id="searchForm" class="form-horizontal" action="${pageContext.request.contextPath}/deleteproducts">
<div class="input-group">
<input name="productId" placeholder="Delete product with id" class="form-control productId"
type="text">
<span class="input-group-btn">
<button class="btn btn-default" type="submit">
<span class="glyphicon glyphicon-search"></span>
</button>
</span>
</div>
</form>
答案 1 :(得分:1)
您正在尝试获取不存在的端点。为什么?
当您指定一个端点 /some_end_point
并尝试通过http协议访问该端点时,它会期望您指定请求方法(获取/发布/输入/输入/删除/等...)。
当拥有这两个参数/some_end_point
+ POST
时,您需要像这样-> @PostMapping("/some_end_point")
在服务器端进行映射。
如果客户端(或其他服务器)尝试访问/some_end_point
+ GET
,则它将失败,因为它不存在,只有/some_end_point
+ POST
存在,因此您有添加另一个端点@GetMapping("/some_end_point")
,依此类推。
答案 2 :(得分:0)
您正在发送GET请求, 但是您用@DeleteMapping注释-需要一个DELETE请求。