Короче говоря, у меня есть проект Spring 3.1 MVC, и мой контроллер не отвечает на запрос POST, когда я нажимаю кнопку отправки.Контроллер Spring MVC не отвечает на POST из формы
Нет ошибки, просто нет ответа. Метод контроллера не вызывается. У меня есть журнал в методе, который отображает сообщение INFO, и ничего не отображается (отображаются другие сообщения INFO). MVC работает (по крайней мере, частично), потому что я получаю ответ от «домашней» JSP-страницы, но ничего не делает для POST.
Я включаю вещи, которые кажутся важными; скажите, есть ли что-то, что вы хотели бы видеть. Класс
Контроллер:
@Controller
@RequestMapping("/register")
public class EditorController {
...
@RequestMapping(method = RequestMethod.POST)
public String addEditorFromForm(@Valid Editor editor,
BindingResult bindingResult) throws ClassNotFoundException,
IOException {
if (LOG.isInfoEnabled()) {
LOG.info("In addEditorFromForm()");
}
// Form did not validate
if (bindingResult.hasErrors()) {
return "register/first_time";
}
getEditorDao().saveEditor(editor);
// New editor still needs to login
return "home";
}
}
WEB-INF/просмотров/регистрация/first_time.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link rel="stylesheet" type="text/css" href="<c:url value='/resources/css/base.css' />">
<title>Register for DIY Doctrine</title>
</head>
<body class="center">
<h2>Sign up for DIY Doctrine</h2>
<sf:form method="POST" modelAttribute="editor">
<fieldset>
<table cellspacing="0">
<tr>
<th><label for="username">Username:</label></th>
<td><sf:input path="username" size="30" id="username"/></td>
</tr>
<tr>
<th><label for="user_password">Password:</label></th>
<td><sf:password path="password" size="30" showPassword="false"
id="user_password"/>
</td>
</tr>
</table>
</fieldset>
<input type="submit" value="Submit Registration" />
</sf:form>
</body>
</html>
Вы получаете register/first_time.jsp
от этого метода в контроллере:
@RequestMapping(value = "first_time")
public String displayForm(Model model) {
if (LOG.isInfoEnabled()) {
LOG.info("In displayForm()");
}
model.addAttribute(new Editor());
return "register/first_time";
}
Это заголовки, возвращенные при нажатии кнопки отправки в.:
Request URL:http://localhost:8080/doctrine/register/first_time
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,sl;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:34
Content-Type:application/x-www-form-urlencoded
Cookie:JSESSIONID=08209E778F63429CFA031A1DB53491DD
Host:localhost:8080
Origin:http://localhost:8080
Referer:http://localhost:8080/doctrine/register/first_time
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.41 Safari/537.36
Form Dataview sourceview URL encoded
username:ngeorgewitz
password:1234
Response Headersview source
Content-Language:en-US
Content-Length:950
Content-Type:text/html;charset=ISO-8859-1
Date:Tue, 24 Dec 2013 20:28:19 GMT
Server:Apache-Coyote/1.1
Где находится URL-адрес на странице JSP, введите url? – Zeus
@zeus Если вы не указали атрибут 'action', POST будет отправлен на текущий URL-адрес. –
Да ... и я предполагаю, что проблема в том, что на этой странице есть текущий URL-адрес чего-то типа/home. Если это так, то решение должно указать атрибут действия. –