2011-04-27 44 views
3

正如下面提到我已經修改了它看起來像下面的示例代碼,但它不會在JSP顯示名字和姓氏:如何通過Session的幫助將參數從Servlet通過Bean傳遞給JSP頁面?

servlet代碼:

//.... 
HttpSession session = request.getSession(); 
Person person = (Person) session.getAttribute("person"); 
if (person == null) { 
    person = new Person();      
} 
person.setNewId(newId); 
person.setFirstName(firstName); 
person.setLastName(lastName); 
session.setAttribute("person", person); 

RequestDispatcher rd = request.getRequestDispatcher("jsp Address"); 
rd.forward(request, response); 

人豆代碼:

private int newId; 
private String firstName; 
private String lastName; 

// Default Constructor 
public Person() {} 

public Person(int newId, String firstName, String lastName) { 
    setNewId(newId); 
    setFirstName(firstName); 
    setLastName(lastName); 
} 

//Getter and Setter Methods 
public int getNewId() {return newId;} 
public void setNewId(int newID) {this.newId = newID;} 
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;} 

而且在JSP代碼:

<jsp:useBean id="person" type="app.models.Person" scope="session"> 
    <jsp:getProperty name="person" property="firstName" /> 
    <jsp:getProperty name="person" property="lastName" /> 
</jsp:useBean> 

輸出該JSP頁面:無

預期輸出:名姓

問題:

1. How can i pass parameters from Servlets to JSP via Bean with help of Session? 
2. Is there a better way to do this code? I am using MVC architecture. 
+0

如何訪問jsp? - 另外,在你的Person類中沒有空的構造函數 編輯:剛纔看到你對空構造函數的迴應。你能澄清你如何訪問servlet/jsp? – Kal 2011-04-27 01:34:07

+0

我正在使用Servlet中的RequestDispatcher將控制權轉移給指定的JSP。我有一個默認的構造函數。編輯:我通過請求調度程序通過DD和JSP訪問servlet。 – 2011-04-27 01:38:46

+0

將此代碼部署到servlet容器後,您希望首先訪問servlet嗎?你有沒有在日誌中的例外?您是否在發送請求之前嘗試添加一些日誌? – Kal 2011-04-27 01:43:00

回答

2

擺脫<jsp:useBean>的。當使用type屬性而不是class時,它不會檢查作用域中是否已有實例,它將覆蓋您在servlet中創建的實例,並帶有一個新的空白默認構造實例。

當使用「MVC架構」時,<jsp:useBean>標記沒用。刪除它,只是用平常EL訪問它:

${person.firstName} ${person.lastName} 

或者更好,以防止XSS attacks,使用JSTL<c:out>

<c:out value="${person.firstName} ${person.lastName}" /> 
+0

我建議''類,但也沒有工作。想知道爲什麼。 – CoolBeans 2011-04-27 03:38:24

+0

@CoolBeans:好吧,那麼要麼沒有正確地重建,要麼他以錯誤的方式運行JSP(通過直接調用JSP URL而不是servlet URL)。 – BalusC 2011-04-27 04:04:17

+0

好的,謝謝你的信息。 – CoolBeans 2011-04-27 04:41:11