2013-11-29 20 views
1

我需要召回的JSP因個人原因的幾件事情:)我有一個簡單的登錄頁面:名稱先前未引入每JSP.5.3

<!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> 

Bean類:

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; 
    } 
} 

我從表單收集數據,創建用戶實例,將其設置爲請求的屬性和請求轉發到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> 

的scriptlet代碼工作正常,堆棧跟蹤:

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) 

在此先感謝

+0

爲什麼我會問一個問題的反對票? –

+0

爲什麼我得到一個downvote回答正確? – SpringLearner

回答

3

請更改useBean的

<jsp:useBean id="user" class="web.model.User" scope="request" /> 
<jsp:getProperty property="firstName" name="user" /> 

在getProperty中,名稱是usebean的id值。

檢查此http://profesores.elo.utfsm.cl/~agv/elo330/2s03/projects/Tomcat/doc/1.2/syntaxref1216.html#8856

+0

我的答案和這個答案是一樣的,但爲什麼我的答案是downvoted – SpringLearner

+0

我dint downvote它加上首先你的代碼是錯的它是 現在它是正確的。 – Lakshmi

0

檢查此行

<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" /> 
+0

downvoters我可以知道原因 – SpringLearner

1

您不匹配的名稱和屬性的屬性。 name是bean的id(是),並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> 

,或者甚至更好,你應該在的firstName使用the JSTL,確保特殊字符正確轉義:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
... 
<c:out value="${user.firstName}"/> 
相關問題