在此处下载 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>
错误
HTTP 状态 500 -/index.jsp (行: 4, 列: 0) useBean 类属性控制器的值。人员控制器无效。
如果它没有显示错误 #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>