2012-11-15 18 views
2

我試圖在jsp中設置一個簡單的表單,該表單會將提交的URL中的搜索查詢。需要jsp表單向特定路徑提交查詢

這是我到目前爲止有:

<form action="search/" method="get" onsubmit="this.action+=this.q.value.trim();return true"> 
    <input type="text" id="q"> 
    <input type="submit" value="go"> 
</form> 

這在隨機配備我的web應用程序的每一頁上一個jsp和它的作品,當我在應用程序的根目錄。例如,如果我最初加載「http:// localhost:8080/MyApp /」,然後在搜索表單中輸入「123456」,它會帶我到「http:// localhost:8080/MyApp/search/123456」,它是我想要的。但是,從該頁面,如果我再次搜索(例如「654321」),它將轉到「http:// localhost:8080/MyApp/search/search/654321」,這對我不起作用。我需要將搜索/ {query}附加到應用路徑的根目錄,而不管我當時可能在哪個頁面上。

我想避免使用JavaScript,如果可能的話,JSTL雖然我很好。

任何建議將不勝感激!

+0

爲什麼使用+ =?你可以嘗試this.action + this.q.value.trim();返回true – Don

+0

如果我把「=」取出不起作用。它只是把我帶到「../search」而不把查詢放在URL中。 –

回答

0

只需爲您的動作添加一個完整路徑,以/開頭。請注意,這取決於您的應用程序環境,您可以使用:

<form action="${pageContext.request.contextPath}/search/"... 

它將在dev和prod中工作。

編輯:

路徑:搜索將嘗試加載從當前路徑,以便相對:http://domain.com/contact/search/ 路徑:/搜索將嘗試加載從域所以相對:http://domain.com/

通過以上的上下文路徑,無論它從開發變爲產品,它都可以工作。

希望這會有所幫助!

+0

謝謝,這有助於一些,但它不起作用,因爲它只需要我「localhost:8080/search/123456」而不是「localhost:8080/MyApp/search/123456」。如果我硬編碼我的應用程序的名稱是這樣的:

+0

我已在31分鐘前更新了該動作...對此做出了錯誤,是否有最後一個?通常情況下,$ {}部分必須打印您的「MyApp」。 –

+0

我更喜歡JSF,也許有一些差異,肯定有一種方法可以在EL中獲得聯繫,試試這個:$ {pageContext.request.contextPath} –