模型属性在 JSP 页面中不可用作请求属性
Model attribute is not available as request attribute in JSP page
我正在尝试使用 Spring MVC 和 JSP 页面创建示例注册页面。
在 tomcat 服务器上打开 url 时,出现以下错误
root cause
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'register' available as request attribute
org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(
我有一个JSPregister.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Registration</title>
</head>
<body>
<form:form action="/register/process" method="POST" modelAttribute="register">
<table style="text-align: center;">
<tr>
<td><form:label path="fname">First Name</form:label></td>
<td><form:input path="fname" name="fname"
id="fname" /></td>
</tr>
<tr>
<td><form:label path="lname">Last Name</form:label></td>
<td><form:input path="lname" name="lname" id="lname" />
</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="CREATE AN ACCOUNT"/>
</td>
</tr>
</table>
</form:form>
</body>
</html>
我有一个控制器classUserController.java
package vnfhub.supplier.controller;
@Controller
public class UserController {
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String getRegisterForm(Model model) {
model.addAttribute("register", new Register());
return "register";
}
@RequestMapping(value = "/register/process", method = RequestMethod.POST)
public String processRegistration(@ModelAttribute("register") Register register, BindingResult result) {
return "success";
}
}
和一个 success.jsp 页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Success Form</title>
</head>
<body>
<font color="green"><h1>Hello</h1></font>
<h1>You have successfully registered</h1>
<font color="green"><h1>Welcome to Spring world !</h1></font>
</body>
</html>
我在 Whosebug 上尝试了很多解决方案....但其中 none 有效。
就您在此处提供的代码而言,我发现您的代码还不错。我用你的代码模拟了这种情况,但不幸地发现 No Exception.
您可能做错的事情是您 运行 在 tomcat 中使用了一些旧的构建代码。尝试在您的容器中清理构建 和重新部署。
注意: 一个友好的建议。 您做错了一件事,即您的表单对 /register/process
的操作会将请求发送到容器根目录(例如 localhost:8080/register/process
)。为此,您将获得 404
。你可能不想要那个。 register/process
应该是您的 URL 并且这将 POST 相对于您的应用程序上下文的请求。如果您的应用程序上下文是 localhost:8080/test
,这会将请求发送到 localhost:8080/test/register/process
我正在尝试使用 Spring MVC 和 JSP 页面创建示例注册页面。
在 tomcat 服务器上打开 url 时,出现以下错误
root cause
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'register' available as request attribute
org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(
我有一个JSPregister.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Registration</title>
</head>
<body>
<form:form action="/register/process" method="POST" modelAttribute="register">
<table style="text-align: center;">
<tr>
<td><form:label path="fname">First Name</form:label></td>
<td><form:input path="fname" name="fname"
id="fname" /></td>
</tr>
<tr>
<td><form:label path="lname">Last Name</form:label></td>
<td><form:input path="lname" name="lname" id="lname" />
</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="CREATE AN ACCOUNT"/>
</td>
</tr>
</table>
</form:form>
</body>
</html>
我有一个控制器classUserController.java
package vnfhub.supplier.controller;
@Controller
public class UserController {
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String getRegisterForm(Model model) {
model.addAttribute("register", new Register());
return "register";
}
@RequestMapping(value = "/register/process", method = RequestMethod.POST)
public String processRegistration(@ModelAttribute("register") Register register, BindingResult result) {
return "success";
}
}
和一个 success.jsp 页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Success Form</title>
</head>
<body>
<font color="green"><h1>Hello</h1></font>
<h1>You have successfully registered</h1>
<font color="green"><h1>Welcome to Spring world !</h1></font>
</body>
</html>
我在 Whosebug 上尝试了很多解决方案....但其中 none 有效。
就您在此处提供的代码而言,我发现您的代码还不错。我用你的代码模拟了这种情况,但不幸地发现 No Exception.
您可能做错的事情是您 运行 在 tomcat 中使用了一些旧的构建代码。尝试在您的容器中清理构建 和重新部署。
注意: 一个友好的建议。 您做错了一件事,即您的表单对 /register/process
的操作会将请求发送到容器根目录(例如 localhost:8080/register/process
)。为此,您将获得 404
。你可能不想要那个。 register/process
应该是您的 URL 并且这将 POST 相对于您的应用程序上下文的请求。如果您的应用程序上下文是 localhost:8080/test
,这会将请求发送到 localhost:8080/test/register/process