[英]Controller doesn't work JAVA. Spring MVC
我将<form>
发送到控制器时遇到问题。 当我按“提交”按钮时,显示400错误。 当我尝试以POST方法将smth输出到控制台时,它不会显示它。 为什么控制器没有收到我的表格? 谢谢!
这是我的JSP页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://www.springframework.org/security/tags"
prefix="sec"%>
<%@page language="java" session="true"%>
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
%>
<!DOCTYPE html>
<fmt:requestEncoding value="utf-8" />
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Поиск оппонента | Haine and Vold</title>
<link rel="shortcut icon" href="<c:url value="/resources/faviicon/iconHV.ico"/>" type="image/x-icon">
<link href="<c:url value="/resources/bootstrap/bootstrap.css"/>"
rel="stylesheet" type="text/css">
<link href="<c:url value="/resources/CSS/styles.css"/>" rel="stylesheet"
type="text/css">
</head>
<body>
<div class="container">
<img class="img-responsive logo" src="/app/resources/logo.jpg">
</div>
<h5 class="text-center noparamserror">${noparams}</h5>
<c:url var="getSearch" value="/user/search" />
<br>
<div class="container text-center">
<form:form class="form-inline centerBlock" modelAttribute="users"
method="POST" action="/app/user/search" accept-charset="utf-8">
<div class="form-group">
<label class="control-label" for="weight"><spring:message
code="label.searchparamweight" /></label>
<form:select multiple="" class="form-control input-sm" path="weight"
name="weight">
<form:option value=""></form:option>
<form:option value="40"></form:option>
<form:option value="50"></form:option>
<form:option value="60"></form:option>
<form:option value="70"></form:option>
<form:option value="80"></form:option>
<form:option value="90"></form:option>
<form:option value="100"></form:option>
<form:option value="110"></form:option>
<form:option value="120"></form:option>
</form:select>
</div>
<div class="form-group">
<label class="control-label" for="gender"><spring:message
code="label.gender" /></label>
<form:select multiple="" class="form-control input-sm" name="gender"
path="gender">
<form:option value=""></form:option>
<form:option value="Мужской"></form:option>
<form:option value="Женский"></form:option>
</form:select>
</div>
<div class="form-group">
<label class="control-label" for="place"><spring:message
code="label.place" /></label>
<form:select class="form-control input-small" name="place"
path="place">
<form:option value=""></form:option>
<form:option value="Дзержинский"></form:option>
<form:option value="Киевский"></form:option>
<form:option value="Комминтерновский"></form:option>
<form:option value="Лененский"></form:option>
<form:option value="Московский"></form:option>
<form:option value="Октябрский"></form:option>
<form:option value="Орджоникидзевский"></form:option>
<form:option value="Фрунзенский"></form:option>
<form:option value="Холодная гора"></form:option>
<form:option value="Червонозаводской"></form:option>
</form:select>
</div>
<div class="form-group">
<label class="control-label" for="age"><spring:message
code="label.searchparamage" /></label>
<form:select multiple="" class="form-control input-small" name="age"
path="age">
<form:option value=""></form:option>
<form:option value="19"></form:option>
<form:option value="20"></form:option>
<form:option value="21"></form:option>
<form:option value="22"></form:option>
<form:option value="23"></form:option>
<form:option value="24"></form:option>
<form:option value="25"></form:option>
<form:option value="26"></form:option>
<form:option value="27"></form:option>
<form:option value="28"></form:option>
<form:option value="29"></form:option>
<form:option value="30"></form:option>
<form:option value="31"></form:option>
<form:option value="32"></form:option>
<form:option value="33"></form:option>
<form:option value="34"></form:option>
<form:option value="35"></form:option>
<form:option value="36"></form:option>
<form:option value="37"></form:option>
<form:option value="38"></form:option>
<form:option value="39"></form:option>
<form:option value="40"></form:option>
<form:option value="41"></form:option>
<form:option value="42"></form:option>
<form:option value="43"></form:option>
<form:option value="44"></form:option>
<form:option value="45"></form:option>
</form:select>
</div>
<button class="btn btn-success" type="submit">
<spring:message code="label.search" />
</button>
</form:form>
</div>
<br>
<div class="scrollTableSearch">
<c:if test="${!empty listUsersSort}">
<table
class="table table-striped table-bordered table-condensed table-hover">
<tr>
<th><spring:message code="label.name" /></th>
<th><spring:message code="label.surname" /></th>
<th><spring:message code="label.gender" /></th>
<th><spring:message code="label.weight" /></th>
<th><spring:message code="label.height" /></th>
<th><spring:message code="label.sport" /></th>
<th><spring:message code="label.place" /></th>
</tr>
<c:forEach items="${listUsersSort}" var="users">
<tr>
<td><a href="<c:url value='/user/search/${users.username}'/>"
target="_blank"> ${users.name}</a></td>
<td>${users.surname}</td>
<td>${users.gender}</td>
<td>${users.weight}</td>
<td>${users.height}</td>
<td>${users.sport}</td>
<td>${users.place}</td>
</tr>
</c:forEach>
</table>
</c:if>
</div>
</body>
<script src="<c:url value="/resources/Jquery/jquery-2.1.4.min.js"/>"
type="text/javascript"></script>
<script src="<c:url value="/resources/bootstrap/bootstrap.js"/>"
type="text/javascript"></script>
</html>
这是我的控制器方法。
@RequestMapping(value = "/user/search", method = RequestMethod.POST,produces = "text/plain;charset=UTF-8")
public String listUsersSort(
@RequestParam(value="weight") int weight,
@RequestParam(value="gender") String gender,
@RequestParam(value="place") String place,
@RequestParam(value="age") int age,
Model model, Principal principal)
{
System.out.println("int");
if(weight<40 && gender.equals("") && place.equals("") && age<19)
{
model.addAttribute("users", new Users());
model.addAttribute("noparams", "Задайте параметры поиска");
return "searchingUser";
}
else{
model.addAttribute("users", new Users());
model.addAttribute("listUsersSort", usersService.listUsersSort(weight, gender, place, age, principal.getName()));
model.addAttribute("allUserMess", this.dialogService.allNewMessForUser(principal.getName()));
model.addAttribute("countOfFeedbacks", this.feedbackService.checkUnreadFedbacks().size());
model.addAttribute("countOfNewUsers", this.usersService.countOfNewUsers());
return "searchingUser";
}}
之所以会出现错误,是因为您的代码介于使用表单支持bean或绑定请求中的参数之间。 您应该从表单中删除modelAttribute
和path
属性。
或从请求中删除带有@RequestParam
注释的参数,并创建一个具有weight
, age
, place
, gender
属性的表单支持对象,然后将该对象添加到以@ModelAttribute("users")
注释的控制器方法签名中
在您的JSP页面中,实际上在向控制器发出请求时缺少上下文根。
<form:form class="form-inline centerBlock" modelAttribute="users"
method="POST" action="/app/user/search" accept-charset="utf-8">
在这种情况下,请求网址将为:
因此,要解决此问题,您可以在操作中包含上下文根:
<form:form class="form-inline centerBlock" modelAttribute="users"
method="POST" action="/your-context-root/app/user/search" accept-charset="utf-8">
或者以这种方式编写:
<spring:url value="/app/user/search" var="formUrl"/>
<form:form class="form-inline centerBlock" modelAttribute="users"
method="POST" action="${formUrl}" accept-charset="utf-8">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.