我正在做一个使用Hibernate和Spring MVC架构的项目。我的问题是,我在我的Web应用程序中使用了(*.htm)url模式,在这种情况下,当我将产品的id发送给控制器进行编辑时,产品的id显示在url中,例如。
"localhost:8080/MyApp/editProduct.htm?productId=03".
但我不想这样。我只是想
"localhost:8080/MyApp/editProduct.htm?productId" or "localhost:8080/MyApp/editProduct.htm/productId/03"
而且我无法在我的控制器中使用@PathVariable Annotation,因为我的url模式(*.htm),并且使用@PathVariable Annotation时,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;
}
从数据库中删除州后的URL:-
http://localhost:8080/PujaInBox/10/deleteState.htm
我认为是国家身份造成了这个问题。10是州ID。
4条答案
按热度按时间xn1cxnb41#
如果您想使用
@PathVariable
注解,那么URL应该是/MyApp/productId/03/editProduct.htm
-以您的扩展名结尾,您的控制器Map应该如下所示这里需要注意的另一个变化是,我提到了相对URL,而不是像
localhost:8080/MyApp/productId/03/editProduct.htm
这样的绝对URL,包括主机名和端口。当您在实际的服务器上部署您的应用程序时,这将不起作用,因为localhost
始终引用您的当前计算机,但您的应用程序部署在其他主机上。希望这是有意义的:)
rdlzhqv92#
将Servlet默认URL模式更改为:
但在这种情况下,更好的选择是在URL的中间部分管理@PathVariables,如下所示:
1rhkuytd3#
我在课堂上做作业。
我猜第一步是使用通配符(*)来Map您的URL。在您的页面中,您可以使用您喜欢的任何URL。
然后,您可以在Servlet中调用方法
getPathInfo()
。或者,您可以调用
getHeader("referer")
来获取您的URL,然后操作您的字符串来获取所需的信息。最后,您可以将字符串放在if-Else或Switch语句中。
oug3syen4#
您所要做的就是在您的html页面中创建一个方法=POST的表单
然后在该表单中创建字段,如果没有任何应该显示的字段,则使用类型隐藏的输入。
这会起到作用,它不会在URL中显示任何参数值,您可以像已经做的那样访问这些值。
希望这能帮上忙。