我正在尝试从我的jsp中调用delete方法。它应该映射到我的控制器中的delete方法。那是我的代码: 在JSP中:
<td><a href="deleteEntry/${product.name}">Delete Entry</a></td>
在控制器中:
@Controller
@RequestMapping(value="/productbook")
public class ProductController {
@RequestMapping(value = "/deleteEntry/{name}")
public ModelAndView deleteEntry(@PathVariable String name){
System.out.println("I'm HERE");
.
... some code
}
单击删除链接时总是出现404错误。知道为什么吗?
此外,每次点击删除链接时都会收到警告: 例如警告:在DispatcherServlet中找不到具有URI XY的HTTP请求的映射,名称为“mvc-dispatcher”
我的web.xml
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
此外,当我点击删除链接时,我注意到URL中缺少文件名“SpringMVC”:
本地主机:8080 / productbook / deleteEntry / namenamename
我的mvc-servlet xml:
<context:component-scan base-package="mypackage.controller.controller" />
<mvc:annotation-driven />
<bean class="mypackage.validator.GuestbookValidator" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
答案 0 :(得分:1)
我终于找到了解决方案!为类和方法的映射添加了两个**。现在错误消失了,我的Sysout被称为:)
@Controller
@RequestMapping(value="/productbook/**")
public class ProductController {
@RequestMapping(value="**/deleteEntry/{name}", method = RequestMethod.GET)
public ModelAndView deleteEntry(@PathVariable String name) {
System.out.println("I'm here!");
SOME CODE
SOME CODE
SOME CODE
return model;
}
我的链接:
<a href="<c:url value="/productbook/deleteEntry/${product.name}" />">Delete Entry</a>
答案 1 :(得分:0)
从映射定义中删除美元符号:
@RequestMapping(value = "/deleteEntry/{name}")
始终以适当的方式生成网址:
<c:url var="deleteUrl" value="/productbook/deleteEntry/${product.name}" />
<td><a href="${deleteUrl}">Delete Entry</a></td>
答案 2 :(得分:0)
您需要将productbook和servlet映射添加为前缀:
<td><a href="/{servlet-mapping}/productbook/delete/${product.name}">Delete Entry</a></td>
所以例如 - 如果你将调度程序servlet映射到“/ api”(并且你在WEB-INF文件夹下有一个api-servlet.xml文件),那么链接应该是:
<td><a href="/api/productbook/delete/${product.name}">Delete Entry</a></td>
除非你使用某种TLD来避免这样做......