2012-04-24 59 views
6

Tôi muốn chuyển một đối tượng tùy chỉnh kiểu Student từ một servlet đến JSP. Tôi đã tạo một lớp học Sinh viên. Sinh viên có 2 thuộc tính firstname và lastName.Truyền các đối tượng tùy chỉnh từ servlet đến JSP

đậu Student:

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

} 

file HTML đã dành FirstName và LastName từ người sử dụng:

<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 Code:

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> 

Tôi muốn lấy đối tượng 'sinh viên', truy cập các thuộc tính của nó và lưu trữ nó trong biến JSP để xử lý tiếp.

Trả lời

3

Bạn nên chuyển thuộc tính để yêu cầu phạm vi nếu không bắt buộc phải sử dụng trong suốt phiên. Trong Servlet,

request.setAttribute("student", s); 

Trong JSP,

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

Phương pháp setAttribute() trên request, sessionservletContext đã sẽ làm cho nó có sẵn như là một biến JSP/EL bằng tên thuộc tính.

Trong trường hợp cụ thể của bạn, với các dòng sau trong servlet,

session.setAttribute("student", s); 

nó có sẵn trong JSP/EL như ${student}. Vì vậy, chỉ cần điều này nên làm:

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

Nếu bạn muốn lưu nó như là một biến trong JSP để bạn có thể tái sử dụng nó nhiều lần, sử dụng 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

Nó không phải là cần thiết để sử dụng request.setAttribute() để gửi dữ liệu. bạn cũng có thể sử dụng HttpSession cũng cho điều đó. Trước tiên, bạn phải thiết lập nó như bạn đã làm.

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

Bây giờ bạn có thể nhận được nó trở lại trong jsp sử dụng getAttribute()

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

Bây giờ bạn có thể chơi với con em như bạn muốn. (Bạn có thể muốn nhập class Student của bạn để jsp.)

0

tôi đã cùng một vấn đề thì sau khi đường mòn và lỗi, tôi có giải pháp của nó như sau -

<% 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> 
Các vấn đề liên quan