2

我正在尝试从我的 jsp 中调用删除方法。它应该映射到我的控制器中的删除方法。这是我的代码: 在 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>
4

3 回答 3

2

我终于找到了解决方案!为类和方法的映射添加了两个**。现在错误消失了,我的 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>
于 2013-06-09T15:02:15.060 回答
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 来避免您这样做...

于 2013-06-09T00:10:44.210 回答
0

从映射定义中删除美元符号:

@RequestMapping(value = "/deleteEntry/{name}")

并始终以正确的方式生成 URL:

<c:url var="deleteUrl" value="/productbook/deleteEntry/${product.name}" />
<td><a href="${deleteUrl}">Delete Entry</a></td>
于 2013-06-08T20:51:46.910 回答