重置弹簧网址。提交表单两次后会附加URL

时间:2014-12-22 22:30:58

标签: java spring forms spring-mvc url

<form:form action="register/student.htm" method="post" modelAttribute="registerForm">
.....
</form:form>

当我最初提交此表单时,网址为

“loclhost:8080 / SpringSchool /register/ student.htm”

如果提交失败并再次提交,则会追加新网址并变为:

“loclhost:8080 / SpringSchool /register/register/ student.htm”

结果我收到404错误。如何重置网址,以便不附加网址或基本上使其工作?

@Controller
@RequestMapping("/register")
public class RegisterController {

@RequestMapping(method=RequestMethod.GET)
    public ModelAndView registerPage(){

        return new ModelAndView("registerStudent", "registerForm", new Student());
    }


    @RequestMapping(value="/student", method = RequestMethod.POST)
    public ModelAndView registerStudent(@ModelAttribute("registerForm") final Student student, RedirectAttributes redirectAttr){
            ....
            return new ModelAndView("registerStudent", "registerForm", student);            

    }

查看解析器

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
</bean>

2 个答案:

答案 0 :(得分:1)

如果从'/'开始URL,则表示上下文的根,但如果从word开始URL,则表示'来自当前路径'。如果您在网址中添加“/”,则应解决您的问题:

<form:form action="/${pageContext.request.contextPath}/register/student.htm" method="post" modelAttribute="registerForm">
.....
</form:form>

答案 1 :(得分:1)

这是因为您的表单操作正在使用相对路径。要解决您的问题,您应该将jsp组织到一个文件夹中,控制器应该返回带有相应路径的视图。

将你的jsp移动到:

/WEB-INF/jsp/register/registerStudent.jsp

您的控制器应返回视图名称:

register/registerStudent

在您的表单中,将操作更改为:

<form:form action="student.htm" method="post" modelAttribute="registerForm">
.....
</form:form>