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>

如果控制器的路径不是 root('/') 并在没有“控制器路径”的锚标记中设置路径,就像您的代码一样

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

Spring MVC 尝试查找具有 RequetMapping 到 '/getSingleBulletin' 的控制器,这会导致 404 错误(如果未定义此类控制器),而不是 'TheController' 中的函数 'getSingleBulletin'。

我希望这能帮到您 : )

于 2013-04-11T02:46:02.553 回答
0

问题解决了。这是我的网址。

<a href="<c:url value="/bulletin/${bulletin.id}" />" >${bulletin.name} -- ${bulletin.subject}</a>

这是我的控制器方法。

@RequestMapping(value = "/bulletin/{id}", method = RequestMethod.GET)
    public String getSingleBulletin(@PathVariable("id") int id, Model model) {
        try {
            Bulletin bulletin = bulletinDAO.getSingleBulletin(id);
            model.addAttribute("bulletin", bulletin);
            return "ShowBulletin";
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return "FailurePage";
        }
    }
于 2013-04-13T00:37:16.830 回答