【问题标题】:How to pass parameters from Servlet via Bean to JSP page with the help of Session?如何在Session的帮助下通过Bean将参数从Servlet传递到JSP页面?
【发布时间】:2011-08-13 11:21:39
【问题描述】:

如下所述,我对代码进行了更改,如下例所示,但在 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);

Person Bean 代码:

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.

【问题讨论】:

  • 你是如何访问 jsp 的? - 此外,您的 Person 类中没有空构造函数 编辑:刚刚看到您对空构造函数的响应。你能澄清一下你是如何访问 servlet/jsp 的吗?
  • 我正在使用 Servlet 中的 RequestDispatcher 将控制权转移到命名的 JSP。我有一个默认构造函数。编辑:我通过请求调度程序通过 DD 和 JSP 访问 servlet。
  • 在您将此代码部署到您的 servlet 容器之后,您首先要访问 servlet,我希望?您是否在日志中发现任何异常?您是否尝试在发送请求之前添加一些日志?
  • 不!我没有任何例外。但是我的 JSP 没有捕捉到我通过 JSP >>Servlet 传递的参数。

标签: java jsp session servlets javabeans


【解决方案1】:

摆脱&lt;jsp:useBean&gt;。当使用type 属性而不是class 时,它不会检查范围内是否已经存在一个实例,它会用一个新的空白默认构造覆盖您在servlet 中创建的Person 实例实例。

当使用“MVC 架构”时,&lt;jsp:useBean&gt; 标签是没用的。删除它并使用通常的EL 访问它:

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

或者更好,为了防止XSS attacks,使用JSTL&lt;c:out&gt;

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

【讨论】:

  • 我建议使用class,但这也不起作用。想知道为什么。
  • @CoolBeans: 嗯,那么它要么没有正确重建,要么他以错误的方式运行 JSP(通过直接调用 JSP URL 而不是 servlet URL)。
  • 我只是使用了表达式语言而不是 及其工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
相关资源
最近更新 更多