2012-08-14 72 views
0

我有jsp,其方法action =「POST」。 最初,這個jsp通過一個控制器(Spring)調用,URL中的查詢字符串param1 = paramValue1。 (例如/thisJsp.jsp?param1=paramValue1)。 Spring在這裏使用了GET方法,所以查詢參數被讀取。POST方法讀取查詢參數而不是表單字段

後來我會通過javascript設置一個隱藏的表單輸入字段$('#param1')。val(paramValue2)來提交()。

我的問題是回到控制器,它註冊的方法操作是POST,但當我做request.getParameter(「param1」)時,它會始終返回paramValue1。

使用Fiddler,我看到param1 = paramValue2被註冊,意味着它在submit()上設置。

我錯過了什麼?

我使用Tomcat服務器和Spring 2.0.7

回答

0

你可以看到,POST將會網址是什麼?您的表單可能會或可能沒有設置「操作」屬性。如果沒有設置,則它會POST到當前頁面的相同URL。這可能會導致您在POST字符串中查詢字符串中的?param1 = paramValue1,但在發佈主體中也有param1 = paramValue2。您可以更改表單,使其操作僅設置爲「/thisJsp.jsp」而不帶查詢字符串,這可能會解決您的問題。

通常,在請求中多次包含相同的命名參數(GET或POST)是有效的。你也可以嘗試在你的控制器中調用request.getParameterValues(「param1」),它將返回一個字符串數組。這將是一個很好的測試,看看你是否確實傳遞了param1的兩個值。

+0

from控制器:request.getMethod()反映POST和request.getParameterValues返回項目[0] = paramValue1 [1] = paramValue2 ...但爲什麼POST仍然返回[0]項目? – user1346699 2012-08-14 20:39:54

+0

因爲您使用包含param1 = paramValue1的查詢字符串發佈URL。所以param被指定了兩次:一次在查詢字符串中,一次在post主體中。服務器讀取這兩個值。將表單的「action」屬性設置爲控制器的URL,而不需要任何查詢字符串,並且應該全部設置。 – jfrank 2012-08-14 21:32:04

+0

感謝jfrank。設置「動作」屬性解決了它。 – user1346699 2012-08-15 14:30:03

相關問題