我正在使用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"
我无法在我的控制器中使用@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。
答案 0 :(得分:0)
将servlet默认网址格式更改为:
<servlet-mapping>
<servlet-name>servlet_name</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
但在这种情况下,更好的选择是在URL的中间部分管理您的@PathVariables,例如:
/myapp/product/{productId}/edit.html
答案 1 :(得分:0)
如果您想使用@PathVariable
年金,那么网址应为
/MyApp/productId/03/editProduct.htm
- 以您的扩展程序结束,您的控制器映射应该是这样的
@RequestMapping(value="/productId/{id}/editProduct")
public String editProduct(@PathVariable String id, Model model) {
}
这里要注意的另一个变化是我提到了一个相对URL而不是像localhost:8080/MyApp/productId/03/editProduct.htm
这样的绝对URL,包括主机名和端口。当您在实际服务器中部署应用程序时,这不会起作用,因为localhost
始终引用您当前的计算机,但您的应用程序部署在其他主机上。
希望有道理:)
答案 2 :(得分:0)
我在课堂上做作业。
我猜测第一步是使用通配符(*)来映射您的URL。在您的网页中,您可以使用您喜欢的任何网址。
然后,您可以在servlet中调用方法getPathInfo()
。
String action = request.getPathInfo();
或者您可以致电getHeader("referer")
获取您的网址,然后操纵您的字符串以获取您需要的信息。
最后,您可以将字符串放在if-else或switch语句中。
答案 3 :(得分:0)
您所要做的就是在html页面中使用method = post
创建一个表单<form method="post">
然后在此表单中创建字段,如果没有任何应显示的字段,则使用类型为hidden的输入。
<input type="hidden" name="parametername" id="parameterid" value="parametervalue">
这将解决问题,它不会在URL中显示任何参数值,您可以像以前一样访问这些值。
希望这会有所帮助......