2016-12-06 81 views
0

我想將參數從JSP傳遞到Spring MVC控制器。但是控制器不會被調用。我已經閱讀了許多相關的文章,並嘗試了各種解決方案,但它不適合我。Spring MVC:來自JSP的調用不會去控制器

我的web.xml文件看起來是這樣的:

<display-name>MyList</display-name> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

<servlet> 
    <servlet-name>mylist</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>mylist</servlet-name> 
    <url-pattern>/welcome.jsp</url-pattern> 
    <url-pattern>/welcome.html</url-pattern> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping> 

我的控制器:

@RequestMapping(path = "/subcategory/{id}", method = RequestMethod.GET) 
public String findSubcategory(@PathVariable int id,Model model) { 
    List<Category> subCategoryList = this.myListDao.getSubCategories(id); 
    model.addAttribute("subcategories", subCategoryList); 
    return "searchCategory" ; 
} 

從我的JSP相關的代碼如下

<spring:url value="/subcategory/1" var="formUrl"/> 
<c:forEach var="category" varStatus="status" items="${categories}">  
    <li><a href="${fn:escapeXml(formUrl)}">${category.description}</a></li> 
    </c:forEach> 

它工作時,我有url爲/subcategory.html,在我的控制器中有@RequestMapping("/subcategory")。當我使用/subcategory/1並更改相應的請求映射時,它不起作用。我曾嘗試過各種網址格式,如<url-pattern>/mylist/*</url-pattern><url-pattern>/MyList/*</url-pattern>等,但沒有任何工作。我真的很感謝任何幫助解決這個問題。提前致謝。

回答

0

您當前的servlet映射覆蓋默認或根servlet映射

<url-pattern>/welcome.jsp</url-pattern> 
<url-pattern>/welcome.html</url-pattern> 
<url-pattern>*.html</url-pattern> 

<servlet-mapping> 
    <servlet-name>mylist</servlet-name> 
    <url-pattern>/welcome.jsp</url-pattern> 
    <url-pattern>/welcome.html</url-pattern> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping> 

你下面的映射允許任何請求與* .html被接受,因此你的調用/subcategory.html沒有任何問題。

<url-pattern>*.html</url-pattern> 

相反,它應改爲,

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

要記住的幾點,

  1. <url-pattern>/*</url-pattern>

    這種模式通常與Filter建議繼續與過濾器鏈接。否則使用這種模式會讓你照顧所有的責任,比如提供靜態資源等來明確處理。

+0

非常感謝......它的工作。我最初對使用/爲url模式持懷疑態度,但這是似乎工作的唯一解決方案。 – Love2LearnNShare

+0

這是工作正常......但是當我清除瀏覽器緩存data..it沒有顯示的CSS ...在控制檯上我得到一個錯誤「代碼」沒有找到映射與URI的HTTP請求[/ MYLIST /資源/....in DispatcherServlet。我嘗試使用 'code',但它不會將我帶到控制器中......它可以很好地處理* .html網址映射。任何線索爲什麼會發生? – Love2LearnNShare

+0

@ Love2LearnNShare這似乎是與您的靜​​態資源配置相關的另一個問題。我建議就此提出另一個問題。這與您放置靜態資源的位置有關。另外提及你的目錄結構相同 – ScanQR

0
@RequestMapping(path = "/subcategory/{id}", method = RequestMethod.GET) 

,而不是路徑,你應該使用值,像這樣:

@RequestMapping(value = "/subcategory/{id}", method = RequestMethod.GET) 
0

您的通話無法到達控制器,因爲您的請求映射「/子/(編號)」不符合任何URL-用您的調度程序servlet定義的模式。您可以嘗試更換這些線路:與

<url-pattern>/*</url-pattern>