Имя не было ранее введено согласно JSP.5.3
Мне нужно вспомнить несколько вещей на jsp по личным причинам:) У меня есть тривиальная страница входа в систему:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</heaf>
<body>
<form action="LoginServlet.do" method="POST">
<p>
First name: <input type="text" size="20" name="first">
</p>
<p>
Last name: <input type="text" size="20" name="last">
</p>
<input type="submit" value="send">
</form>
</body>
</html>
Класс бобов:
package web.model;
public class User {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Я собираю данные из формы, создаю экземпляр User, устанавливаю его в качестве атрибута запроса и пересылаю запрос на страницу result.jsp:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
HttpSession session = request.getSession();
User user = new User();
user.setFirstName(request.getParameter("first"));
user.setLastName(request.getParameter("last"));
request.setAttribute("user", user);
RequestDispatcher view = request.getRequestDispatcher("result.jsp");
view.forward(request, response);
}
код страницы:
<%@ page
language="java"
contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"
import="web.utils.Utils, web.model.User"
%>
<!DOCTYPE html>
<html>
<head>
<title>Result</title>
</head>
<body>
<%= ((User) request.getAttribute("user")).getFirstName() %>
<jsp:useBean id="user" class="web.model.User" scope="request" />
<jsp:getProperty property="user" name="firstName" />
</body>
</html>
код скриптлета работает правильно, stacktrace:
SEVERE: Servlet /Web threw load() exception
org.apache.jasper.JasperException: file:/result.jsp(15,0) jsp:getProperty for bean with name 'firstName'. Name was not previously introduced as per JSP.5.3
at org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1110)
at org.apache.jasper.compiler.Node$GetProperty.accept(Node.java:1125)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2375)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2427)
at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2433)
at org.apache.jasper.compiler.Node$Root.accept(Node.java:474)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2375)
at org.apache.jasper.compiler.Generator.generate(Generator.java:3517)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:250)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.init(JspServlet.java:138)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3954)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:426)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519)
at java.lang.Thread.run(Thread.java:722)
заранее спасибо
3 ответа
Пожалуйста, измените usebean
<jsp:useBean id="user" class="web.model.User" scope="request" />
<jsp:getProperty property="firstName" name="user" />
в getProperty имя является значением идентификатора usebean.
проверьте это http://profesores.elo.utfsm.cl/~agv/elo330/2s03/projects/Tomcat/doc/1.2/syntaxref1216.html
Вы не соответствовали атрибутам имени и свойства. name
это идентификатор (да) бобов, и property
это свойство bean-компонента, который вы хотите получить:
<jsp:getProperty property="firstName" name="user" />
Но, что более важно, вы кодируете свои JSP, как если бы мы были еще в 1999 году. С тех пор были введены JSP EL и JSTL, и тэги scriptlets и теги jsp:xxx больше не должны использоваться в JSP. Ваш JSP должен быть просто:
<%@ page
language="java"
contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"
%>
<!DOCTYPE html>
<html>
<head>
<title>Result</title>
</head>
<body>
${user.firstName}
</body>
</html>
Или, что еще лучше, вы должны использовать JSTL и убедиться, что специальные символы в firstName правильно экранированы:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
...
<c:out value="${user.firstName}"/>
Проверьте эту строку
<jsp:useBean id="user" class="web.model.User" scope="request" />
<jsp:getProperty property="user" name="firstName" />
так должно быть
<jsp:useBean id="user" class="web.model.User" scope="request" />
<jsp:getProperty property="*" name="user" />
нота *
для всех свойств
но для вашего случая это должно быть
<jsp:useBean id="user" class="web.model.User" scope="request" />
<jsp:getProperty property="firstName" name="user" />