2012-04-24 13 views
6

Desidero passare un oggetto personalizzato di tipo Student da un servlet a JSP. Ho creato una classe bean Student. Lo studente contiene 2 proprietà firstname e lastName.Passaggio di oggetti personalizzati da servlet a JSP

Studente di fagioli:

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 per l'adozione di FirstName e LastName da parte dell'utente:

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

Codice 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> 

Desidero ottenere l'oggetto "studente", accedere ai relativi attributi e memorizzarlo in una variabile JSP per un'ulteriore elaborazione.

risposta

3

È necessario passare attributi per richiedere l'ambito se non richiesto per l'utilizzo durante la sessione. In servlet,

request.setAttribute("student", s); 

In JSP,

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

Procedimento setAttribute() su request, session e servletContext sarà già renderlo disponibile come variabile JSP/EL dal nome dell'attributo.

Nel vostro caso particolare, con la seguente riga nel servlet,

session.setAttribute("student", s); 

è disponibile in JSP/EL come ${student}. Così, proprio questo dovrebbe fare:

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

Se si desidera memorizzare come un'altra variabile in JSP in modo da poter riutilizzare più volte, utilizzare 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

Non è indispensabile utilizzare request.setAttribute() per inviare i dati. puoi usare anche HttpSession anche per quello. Per prima cosa devi impostarlo come hai già fatto.

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

Ora è possibile farlo tornare in JSP usando getAttribute()

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

Ora si può giocare con il vostro studente come si desidera. (Si consiglia di importare la classe Student a jsp.)

0

Ho avuto lo stesso problema poi dopo pista ed errore, ho avuto la sua soluzione, come di seguito -

<% 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>