2014-01-16 74 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>