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 エラーが発生します。理由はありますか?

さらに、削除リンクをクリックするたびに警告が表示されます: 例: 警告: 「mvc-dispatcher」という名前の DispatcherServlet で URI XY を持つ HTTP 要求のマッピングが見つかりません

私の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サーブレット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

ついに解決策を見つけました!クラスとメソッドの両方のマッピングに 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 とサーブレットのマッピングをプレフィックスとして追加する必要があります。

<td><a href="/{servlet-mapping}/productbook/delete/${product.name}">Delete Entry</a></td>

たとえば、ディスパッチャ サーブレットを「/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 に答える