日期:2014-05-17  浏览次数:20937 次

(spring3.0MVC+Hibernate)JS定义form的action问题
框架是spring3.0MVC+hibernate。

问题:当我用JS定义form的action为:


document.getElementById("loginForm").action="/login/"+userId+"/"+userPwd+".bia";
document.getElementById("loginForm").submit();

点击登录后,网页地址栏显示为:

http://localhost/login/zhangsan/pwd.bia


可是当我在JS用定义form的action为:

document.getElementById("loginForm").action="BIAoa/login/"+userId+"/"+userPwd+".bia";
document.getElementById("loginForm").submit();

点击登录后,网页的地址栏显示为:

http://localhost/BIAoa/BIAoa/login/zhangsan/pwd.bia



而网页地址栏的正确显示应该为:

http://localhost/BIAoa/login/zhangsan/pwd.bia


现在的问题就是,我应该怎么用JS定义form的action的值,才能让路径正确跳转。

望各位大侠赐教,万分感激。
------解决方案--------------------
楼主有两种方式一种是用相对路径,相对路径的话楼主可以先看看你此时的jsp的http路径是什么根据这个确定action的路径,要么就是用通用的方式直接写绝对路径http://localhost/BIAoa/login/zhangsan/pwd.bia
------解决方案--------------------

造成那种错误结果的原因,"BIAoa/login/"+userId+"/"+userPwd+".bia";这种是相对路径指定的结果;如果是/开头,那么就是根据服务器ROOT应用来指定了。你的应用名称是BIAoa,那么你就不要直接指定这个部分了。而且你这个应用如果部署为其他的名字,这还得修改,所以直接完全使用js指定必然没法确保正确。保险的方式是在jsp页面上指定一个应用根目录的名称。比如:var approot = "BIAoa";然后基于这个approot 变量再定义action的路径。当然approot = "BIAoa"直接这么赋值也是不行的,需要通过java代码或者el表达式获取rootPath比较安全。
------解决方案--------------------
首先:
document.getElementById("loginForm").action="/login/"+userId+"/"+userPwd+".bia";
        document.getElementById("loginForm").submit(); 
这个是用的绝对路径“/”
再者:
document.getElementById("loginForm").action="BIAoa/login/"+userId+"/"+userPwd+".bia";
        document.getElementById("loginForm").submit();
用的是相对路径,之所以会出现“http://localhost/BIAoa/BIAoa/login/zhangsan/pwd.bia”是因为第一个"BIAoa"是你项目的上下文路径,第二个“BIAoa”才是你写的相对路径中的。
要想显示正确的地址,没有必要在你的action url前面加BIAoa,而且还是跟项目上下文路径同名的,想显示成“http://localhost/BIAoa/login/zhangsan/pwd.bia”这样非常简单,去web.xml中设置项目上下文路径为项目名称就OK啦或者直接使用绝对路径“/BIAoa/login......”