1

这是我面临的错误的屏幕截图。

问题是忘记密码再次附加在 URL 中。(参见附件图像的地址栏)

在此处输入图像描述

我的控制器如下:

@Controller
@RequestMapping(value="/forgot-password")
public class ControllerForgotPassword {
@RequestMapping(value = "/email", method = RequestMethod.POST)
    public ModelAndView sendMail(HttpServletRequest request) {
        String email = (String) request.getParameter("email");
        boolean flag=serviceForgotPassword.checkEmail(email);
        ModelAndView modelAndView = new ModelAndView();
        if(flag)
        {
            modelAndView.addObject("message", "Mail has been sent to your mail box");
            modelAndView.setViewName("forgot-password-sucess");
            return modelAndView;
        }
        else
        {
            modelAndView.addObject("message", "Please Enter Valid email address");
            modelAndView.setViewName("forgot-password");
            return modelAndView;
        }
    }
}

forgot-password.jsp内容如下:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="fmt"
    uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Forgot-Password</title>
</head>
<body>
<p style="color:red;">${message}</p>
<form action="forgot-password/email" method="POST">
<input type="text" name="email"/>
<input type="submit" value="Send Mail">
</form>
</body>
</html>

我曾尝试modelAndView.setViewName("redirect:/forgot-password-sucess");在该sendMail方法中使用,但随后我无法接收来自控制器的消息。

编辑 :

如果我添加<form action="/CabFMS/forgot-password/email" method="POST">这是我的上下文/项目名称,那么它可以正常工作。

我是否需要在 from 操作中随处添加上下文名称以及控制器映射?

我不能只forgot-password/email在表单操作中使用吗?

请帮忙。

问候,

阿伦

4

1 回答 1

1

此表单操作必须是绝对的以匹配您的控制器。它当前正在指定相对路径。

<form action="/forgot-password/email" method="POST">
              |
           add this leading slash

编辑:这仅在应用程序位于根上下文时才有效。

如果应用程序部署到不同的上下文,则还需要将上下文添加到表单的 action 属性中。

更好的方法是保留相对路径并<base>在页面上使用应该包含上下文的 HTML 标记 - 请参阅是否建议使用 <base> html 标记?. 我倾向于在 JSP 中使用以下内容编写 Spring 应用程序。

<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/">

这样,页面中的相对路径可以自然地根据正确的上下文来解析,无论它在哪里。

于 2012-10-31T13:52:36.583 回答