2012-04-24 78 views
6

我想將一個類型爲Student的自定義對象從一個servlet傳遞到JSP。 我已經創建了一個Student bean類。學生包含2個屬性firstname和lastName。將自定義對象從servlet傳遞到JSP

學生豆:

import java.io.Serializable; 

public class Student implements Serializable { 

    public Student() { 
    } 

    String firstName; 
    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; 
    } 

} 

HTML文件從用戶採取名字和姓氏:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
</head> 
<body> 
    <form id="myForm" method="POST" action="MyFormServlet"> 
     FirstName<input type="text" id="firstName" name="FirstName"/><br> 
     LastName<input type="text" id="lastName" name="LastName"/><br> 
     <button type="submit" />Submit</button> 
    </form> 
</body> 
</html> 

servlet代碼:

import javax.servlet.RequestDispatcher; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 



    public class MyFormServlet extends HttpServlet { 

     @Override 
     protected void doPost(HttpServletRequest request, 
       HttpServletResponse response) { 

      Student s = new Student(); 
      s.setFirstName(request.getParameter("FirstName")); 
      s.setLastName(request.getParameter("LastName")); 

      HttpSession session =request.getSession(); 
      session.setAttribute("student", s); 

      try { 
       RequestDispatcher rd = getServletContext().getRequestDispatcher("/myJsp.jsp"); 
       rd.forward(request, response); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

    } 

myJsp.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 

<!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"> 
</head> 
    <body> 
     <% 
      // I want to do something like this : 
      //Student student =(Student)session.getAttribute("student"); 
      //String fullName=student.firstName + student.lastName; 
     %>  
     <h1><%=fullName%></h1> 
    </body> 
</html> 

我想獲取'student'對象,訪問它的屬性並將其存儲在JSP變量中以供進一步處理。

回答

3

如果不需要在整個會話中使用,則應該傳遞屬性以請求範圍。 在Servlet中,

request.setAttribute("student", s); 

在JSP,

Student student =(Student) request.getAttribute("student"); 
String fullName = "Default"; 
if(student!=null){ 
fullName=student.firstName +" " + student.lastName; 
} 
10

requestsessionservletContextsetAttribute()方法已經使其可如由屬性名稱的JSP/EL變量。

在您的特定情況下,在servlet下面一行,

session.setAttribute("student", s); 

它在JSP/EL可作爲${student}。所以,只要這應該這樣做:

<body> 
    <h1>${student.firstName} ${student.lastName}</h1> 
</body> 

如果你想將其存儲在JSP另一個變量,這樣你可以多次重複使用,使用JSTL<c:set>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
... 
<body> 
    <c:set var="fullName" value="${student.firstName} ${student.lastName}" /> 
    <h1>${fullName}</h1> 
</body> 
1

這是不是必須使用了request.setAttribute()發送數據。 你也可以使用HttpSession。首先你必須按照你已經完成的那樣來設置它。

HttpSession session =request.getSession(); 
session.setAttribute("student", s); 

現在你可以使用的getAttribute()拿回來在JSP

Student student =(Student) session.getAttribute("student"); 

現在你可以,只要你想與你的學生玩。 (您可能要導入你的學生類JSP)

0

我有同樣的問題,然後試錯後,我得到了如下的解決方案 -

<% Student student = (Student)request.getAttribute("student");%><br> 
<table><br> 
    <tr><td>First Name :</td><td><%=student.getFirstName() %></td></tr><br> 
    <tr><td>Last Name :</td><td><%=student.getLastName() %></td></tr><br> 
</table><br>