JSTL 填充服务器端变量



在此处下载 NetBeans 项目。文件 -> 下载

使用 JSTL 1.2,我试图让我的 Web 应用程序记住我的输入,然后在提交表单后将其放入输入框中,但由于某种原因它不记得它。我只有 1 .java类和.jsp文件。

人员控制者.java

package controller;
public class PersonController {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

索引.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="controller.PersonController" %>
<jsp:useBean id="personController" class="controller.PersonController" scope="session"/>
<jsp:setProperty name="personController" property="name" param="name"/>
<!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=ISO-8859-1">
        <title>PersonController</title>
    </head>
    <body>
        <form method="post" action="index.jsp">
            <input name="name" maxlength="30" type="text" id="name" value="<c:out value="${personController.name}"/>"><br/>
            <input type="submit" name="button" value="Remember my name">
        </form>
    </body>
</html>

错误

  1. HTTP 状态 500 -/index.jsp (行: 4, 列: 0) useBean 类属性控制器的值。人员控制器无效。

  2. 如果它没有显示错误 #1,那么它将不会填充输入字段,name发布后使用以前的输入。

行不通。

<jsp:useBean>在默认作用域(即page)中查找一些名称为personController的bean,并将其提供给JSP的其他部分,即您的案例中的html输入标记。但是没有人把这个bean设置到pageScope中,所以useBean将创建PersonController的新实例并放在那里。因此,名称值为空。

如果您不使用任何重定向,则可以简单地根据HTTP请求的参数填充输入的值:

<input name="name" value="<c:out value="${param.name}"/>">

如果您使用的是 HTTP 重定向(您应该在发送 POST 请求后),您可以将name存储到会话中。

<jsp:useBean id="personController" class="controller.PersonController" scope="session"/>
<jsp:setProperty name="personController" property="name" param="name"/>

<jsp:setProperty>将先前找到的(或创建的)Bean personalController的 name 属性设置为名称为 name 的请求参数的值。

对于您的第一个错误,我调试了您的代码,并创建了一个参数化构造函数。您需要在 PersonController 类中添加默认构造函数。它将解析您的"useBean 类属性控制器的值。人员控制器无效"错误。

对于正在设置的值,您正在使用控制器并提供doGet方法,但它尚未定义为Servlet类,它是一个普通的java类。你需要用 HttpServlet 类来扩展它。

谢谢。

如果你只想在提交后记住你的输入,则不需要PersonController.java。就这样写:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!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=ISO-8859-1">
        <title>PersonController</title>
    </head>
    <body>
        <form method="post" action="index.jsp">
            <input name="name" maxlength="30" type="text" id="name" value="<c:out value="${param.name}"/>"><br/>
            <input type="submit" name="button" value="Remember my name">
        </form>
    </body>
</html>

最新更新