【发布时间】:2013-11-23 11:46:08
【问题描述】:
假设我有这个控制器:
import org.java.wsg.service.ClientsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.support.PagedListHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
@Controller
public class ClientsController {
@Autowired
ClientsService clientsService;
@RequestMapping(value = "/clients.htm")
public String clientsPage(HttpServletRequest request, Model model) {
PagedListHolder pagedList = new PagedListHolder(clientsService.getClients());
pagedList.setPageSize(50);
request.getSession().setAttribute("clientsList", pagedList);
model.addAttribute("clients", pagedList.getPageList());
return "clients";
}
@RequestMapping(value = "/clientsNavigate.htm", method = RequestMethod.POST)
public String clientsNavigateToPage(HttpServletRequest request, Model model,
@RequestParam String action) {
PagedListHolder pagedList = (PagedListHolder) request.getSession().getAttribute("clientsList");
if (action.equals("next")) {
pagedList.nextPage();
} else if (action.equals("previous")) {
pagedList.previousPage();
}
model.addAttribute("clients", pagedList.getPageList());
return "clients";
}
@RequestMapping(value = "/clients/{id}.htm", method = RequestMethod.GET)
public String clientById(Model model, @PathVariable Integer id, HttpServletRequest request) {
PagedListHolder pagedList = new PagedListHolder(clientsService.getClientById(id));
pagedList.setPageSize(50);
request.getSession().setAttribute("clientsList", pagedList);
model.addAttribute("clients", pagedList.getPageList());
return "clients";
}
}
编辑:
这是一个clients.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="form" 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">
<title>Clients</title>
<link rel="stylesheet" type="text/css"
href="<c:url value='/resources/css/bootstrap.css'/>"/>
<script type="text/javascript" src="<c:url value="/resources/js/bootstrap.js" />">
</script>
<script type="text/javascript"
src="<c:url value="/resources/js/bootstrap.min.js" />">
</script>
</head>
<body>
<div class="container-fluid">
<div class="row-fluid">
<div class="span10 offset1">
<center>
<h2>Clients</h2>
</center>
<table class="table table-hover">
<tr>
<th>
<center>Id</center>
</th>
<th>
<center>Ip</center>
</th>
<th>
<center>Connections</center>
</th>
<th>
<center>GUID</center>
</th>
<th>
<center>Name</center>
</th>
<th>
<center>Group</center>
</th>
<th>
<center>Time added</center>
</th>
<th>
<center>Last seen</center>
</th>
</tr>
<c:forEach items="${clients}" var="c">
<tr>
<td><c:out value="${c.id}"/></td>
<td><c:out value="${c.ip}"/></td>
<td><c:out value="${c.connections}"/></td>
<td><c:out value="${c.guid}"/></td>
<td><a href="${pageContext.request.contextPath}/clients/${c.id}.htm"><c:out
value="${c.name}"/></a>
</td>
<td><c:out value="${c.group}"/></td>
<td><c:out value="${c.timeAdd}"/></td>
<td><c:out value="${c.timeEdit}"/></td>
</tr>
</c:forEach>
</table>
<form:form method="post" action="clientsNavigate.htm">
<input type="submit" name="action" value="previous" class="btn btn-info" />
<input type="submit" name="action" value="next" class="btn btn-info" />
</form:form>
</div>
</div>
</div>
</body>
</html>
如您所见,第一个方法 (clientsPage) 获取 Client 对象的列表并将它们作为属性传递给 clients.jsp 页面。第二种方法(clientsNavigateToPage)用于处理clients.jsp页面中的表单请求(带有两个按钮(Next和Previous)的简单表单)。第三种方法用于获取具有某个id的多个客户端。但我面临的问题是在处理我的/clients/{id}.htm 请求后,我无法处理我的/clientsNavigate.htm 请求。
它说:
HTTP Status 405 - Request method 'POST' not supported
如何处理这个问题?
【问题讨论】:
-
请包含您的 HTML(或用于发送表单的任何内容)代码。
-
您是否检查过表单
action是否正确,即该请求是否发送到正确的控制器?尝试从映射中删除method = RequestMethod.POST。尽管这似乎是正确的,但让我们检查一下删除它是否有帮助。 -
@MichałRybak 刚刚检查过。是的,它已发送到正确的控制器。
-
删除
method = RequestMethod.POST有帮助吗? -
@MichałRybak 不,它没有。
标签: java spring spring-mvc