【发布时间】:2015-03-09 07:28:13
【问题描述】:
我正在开发一个使用 hibernate 和 Spring MVC 架构的项目。 我的问题是我在我的 Web 应用程序中使用 (*.htm) url 模式,在这种情况下,当我将产品的 id 发送到控制器以编辑在 url 中显示的特定产品产品 id 时,例如。
"localhost:8080/MyApp/editProduct.htm?productId=03".
但我不想要这个。我只是想要
"localhost:8080/MyApp/editProduct.htm?productId" or "localhost:8080/MyApp/editProduct.htm/productId/03"
由于我的 url 模式 (*.htm) 和使用 @PathVariable 注释,我无法在控制器中使用 @PathVariable 注释,因此 JSP 页面永远不会正确加载。 有什么建议么 。提前致谢。
控制器:-
@RequestMapping(value = "/{sId}/deleteState.htm")
public ModelAndView deleteState(@PathVariable("sId") int sId ){
ModelAndView mav = new ModelAndView();
try{
stateDAO.deleteById(sId);
mav.addAllObjects(prepapareModel());
mav.addObject("msg", "State Deleted Succesdfully");
mav.setViewName("admin/viewState");
return mav;
}catch(Exception e){
e.printStackTrace();
mav.addAllObjects(prepapareModel());
mav.addObject("err", "Failed to Delete State");
mav.setViewName("admin/viewState");
return mav;
}
}
public Map prepapareModel(){
Map map = new HashMap();
map.put("states", stateDAO.findAll());
return map;
}
从数据库中删除状态后的网址:-
http://localhost:8080/PujaInBox/10/deleteState.htm
我认为状态 ID 正在制造问题。 10 是状态 ID。
【问题讨论】:
-
要么使用隐藏参数来传递值。或编码 URL。
-
如果您打算使用路径变量,那么 URL 应该是
localhost:8080/MyApp/productId/03/editProduct.htm以您的扩展名结尾 -
另外,如果你真的想隐藏你的参数,为什么不触发 POST 请求而不是 GET 请求?即使使用路径变量,也很容易找到您在 URL 中发送的
productId值,并且它们在浏览器历史记录中作为 URL 可用,所以它不是那么安全 :) -
@Prashant ,我没有使用 form ,所以我该如何使用隐藏参数。有没有可能???
-
那么它只是一个超链接吗?