(spring3.0MVC+Hibernate)JS定義form的action有關問題

tags:    時間:2014-05-04 16:49:50
(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......」

推薦閱讀文章

Bookmark the permalink ,來源:互聯網