Spring MVC:来自JSP的调用不会进入控制器

时间:2016-12-06 21:29:25

标签: spring jsp spring-mvc

我正在尝试将参数从JSP传递给Spring MVC控制器。但是控制器没有被调用。我已经阅读了很多相关的帖子,并尝试了各种解决方案,但它并不适合我。

我的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" ;
}

My 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>

当我的网址为/subcategory.html并且我的控制器中有@RequestMapping("/subcategory")时,它会起作用。当我使用/subcategory/1并更改相应的请求映射时,它不起作用。我尝试过各种网址模式,例如<url-pattern>/mylist/*</url-pattern><url-pattern>/MyList/*</url-pattern>等。但没有任何工作。我非常感谢你解决这个问题的任何帮助。非常感谢。

3 个答案:

答案 0 :(得分:0)

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

而不是路径,你应该使用值,如下所示:

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

答案 1 :(得分:0)

您的呼叫无法到达控制器,因为您的请求映射“/ subcategory / {id}”与您的调度程序servlet定义的任何url-pattern都不匹配。您可以尝试替换这些行:

library(data.table)
setDT(df)[df[, .(time = min(time):max(time)) , by = group], on = c("group", "time")]
#    group time data
# 1:     A    1    5
# 2:     A    2    6
# 3:     A    3   NA
# 4:     A    4    7
# 5:     B    1    8
# 6:     B    2    9
# 7:     B    3   10
# 8:     C    5    1
# 9:     C    6   NA
#10:     C    7    2
#11:     C    8    3

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

答案 2 :(得分:0)

您当前的servlet映射覆盖了默认或根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>

您的以下映射允许接受任何带* .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使用此模式继续进行过滤器链接。否则,使用此模式将使您能够处理所有责任,如提供静态资源等,以便明确处理。