1

JSP でリンクを使用して Spring コントローラーのメソッドにパラメーターを渡そうとしていますが、404 エラーが発生します。これが私のJSPコードの関連部分です。

<c:forEach var="bulletin" items="${bulletins}">
    <c:if test="${bulletin.approved}">
        <a href="/bulletin/${bulletin.id}" >${bulletin.name}
            -- ${bulletin.subject}</a>
        <br />
        <br />
    </c:if>
</c:forEach>

これが私のコントローラーのメソッドです。

@RequestMapping(value = "/bulletin/{id}", method = RequestMethod.GET)
public ModelAndView getSingleBulletin(@PathVariable("id") int id,
        Model model) {
    ModelAndView mav = new ModelAndView();

    try {
        Bulletin bulletin = bulletinDAO.getSingleBulletin(id);
        mav.setViewName("WEB-INF/jsp/ShowBulletin");
        if (bulletin != null) {
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
                    .currentRequestAttributes();
            HttpSession session = attributes.getRequest().getSession(true);
            session.setAttribute("bulletin", bulletin);
        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
        mav.setViewName("WEB-INF/jsp/FailurePage");
    }

    return mav;
}
4

2 に答える 2

1

パスの問題だと思います。

問題の「getSingleBulletin」関数を含むコントローラーのパスを確認してください。
それはルートパスとして設定されていますか?(/) そうでない場合は、それが理由です。

例えば、

/* path to below controller */
@RequestMapping("/toController")  
public class TheController {

  /* path to below function (in the controller) */
  @RequestMapping(value="getSingleBulletin", method=RequestMethod.GET)
  public ModelAndView getSingleBulletin(/*parameters*/) {

  }

}

この場合、「getSingleBulletin」関数にリクエストを送信する場合は、アンカー タグのパスを次のように設定する必要があります。

<a href="/toController/getSingleBulletin?id=${bulletin.id}">${bulletin.name} -- ${bulletin.subject}</a>

コントローラーへのパスがルート(「/」)ではなく、コードのように「コントローラーパス」なしでアンカータグにパスを設定する場合

<a href="/getSingleBulletin?id=${bulletin.id}">${bulletin.name} -- ${bulletin.subject}</a>

Spring MVC は、'/getSingleBulletin' への RequetMapping を持つコントローラーを見つけようとしますが、'TheController' の関数 'getSingleBulletin' ではなく、404 エラー (そのようなコントローラーが定義されていない場合) が発生します。

これがお役に立てば幸いです:)

于 2013-04-11T02:46:02.553 に答える