4

個人的な理由で、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)

前もって感謝します

4

3 に答える 3

5

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

于 2013-11-29T07:18:42.580 に答える
1

name 属性と property 属性が一致しませんでした。nameは Bean の ID (はい) であり、property取得する Bean のプロパティです。

<jsp:getProperty property="firstName" name="user" />

しかし、もっと重要なのは、まだ 1999 年であるかのように JSP をコーディングしていることです。それ以来、JSP EL と JSTL が導入され、スクリプトレットと 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}"/>
于 2013-11-29T07:16:26.957 に答える