如下所述,我对代码进行了更改,如下例所示,但它没有在JSP中显示firstname和lastname:
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页面的输出:无
预期输出:firstName lastName
问题:
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.
最佳答案 摆脱< jsp:useBean>.当使用type属性而不是class时,它不会检查作用域中是否已有实例,它将使用新的空白默认构造实例覆盖您在servlet中创建的Person实例.
使用“MVC架构”时,< jsp:useBean>标签没用.删除它,只需使用通常的EL访问它:
${person.firstName} ${person.lastName}
或者更好的是,要防止XSS attacks,请使用JSTL< c:out>.
<c:out value="${person.firstName} ${person.lastName}" />