2014-01-16 53 views
2

下载NetBeans项目here。文件 - >下载JSTL填充服务器端变量

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

PersonController.java

package controller; 

public class PersonController { 

    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

的index.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类属性controller.PersonController的值无效。

  2. 如果它没有显示错误#1,那么它将不会填充输入字段name与上一个输入发布后。

+0

有什么错误吗? –

回答

-1

这是行不通的。

<jsp:useBean>寻找一些名为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>先前发现的(或创建)豆personalController的名称属性设置为与名称name请求参数的值。

+0

这个答案对我不起作用,你可以删除,以便我的问题仍然没有答案? – ThreaT

+0

错误与代码中的第4行(useBean)有关。它看起来像PersonController不可用作为WEB-INF/classes/controller/PersonController。即使没有建议的'setProperty'标签,你也会得到这个错误。 – Kojotak

+0

另一个原因是,您的类无效,JSP无法识别它。尝试将'import =“controller.PersonController”'添加到'<%@ page ...%>'指令中。 – Kojotak

0

对于你的第一个错误,我调试你的代码,并且你创建了一个参数化的构造函数。您需要在PersonController类中添加默认构造函数。它将解决您的“useBean类属性controller.PersonController无效”错误的值。

对于正在设置的值,您正在使用Controller并提供了doGet方法,但尚未将其定义为Servlet Class,它是一个普通的Java类。您需要使用HttpServlet类进行扩展。

谢谢。

0

如果您在提交后只想记住您的输入,那么不需要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>