hibernate 如何隐藏url中的参数值

u3r8eeie  于 2022-11-14  发布在  其他
关注(0)|答案(4)|浏览(114)

我正在做一个使用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。

xn1cxnb4

xn1cxnb41#

如果您想使用@PathVariable注解,那么URL应该是
/MyApp/productId/03/editProduct.htm-以您的扩展名结尾,您的控制器Map应该如下所示

@RequestMapping(value="/productId/{id}/editProduct")
public String editProduct(@PathVariable String id, Model model) {

}

这里需要注意的另一个变化是,我提到了相对URL,而不是像localhost:8080/MyApp/productId/03/editProduct.htm这样的绝对URL,包括主机名和端口。当您在实际的服务器上部署您的应用程序时,这将不起作用,因为localhost始终引用您的当前计算机,但您的应用程序部署在其他主机上。
希望这是有意义的:)

rdlzhqv9

rdlzhqv92#

将Servlet默认URL模式更改为:

<servlet-mapping>
    <servlet-name>servlet_name</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

但在这种情况下,更好的选择是在URL的中间部分管理@PathVariables,如下所示:

/myapp/product/{productId}/edit.html
1rhkuytd

1rhkuytd3#

我在课堂上做作业。
我猜第一步是使用通配符(*)来Map您的URL。在您的页面中,您可以使用您喜欢的任何URL。
然后,您可以在Servlet中调用方法getPathInfo()

String action = request.getPathInfo();

或者,您可以调用getHeader("referer")来获取您的URL,然后操作您的字符串来获取所需的信息。
最后,您可以将字符串放在if-Else或Switch语句中。

oug3syen

oug3syen4#

您所要做的就是在您的html页面中创建一个方法=POST的表单

<form method="post">

然后在该表单中创建字段,如果没有任何应该显示的字段,则使用类型隐藏的输入。

<input type="hidden" name="parametername" id="parameterid" value="parametervalue">

这会起到作用,它不会在URL中显示任何参数值,您可以像已经做的那样访问这些值。
希望这能帮上忙。

相关问题