一尘不染

获取我希望由增变器设置的字符串的null值

jsp

以下是Servlet类,该Servlet类通过在 Bean 类的对象上调用方法来 设置名称 ,然后转发到jsp页面。 __

package BeanTesters;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

 public class Controller extends HttpServlet {
@Override
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
    Bean bean = new Bean(); 
    bean.setName("Suhail Gupta");
    //request.setAttribute("name", bean);
    RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
    rd.forward(request, response);
  }
}

这是bean类:

package BeanTesters;

 public class Bean {

  private String name = null;

  public void setName(String n) {
    name = n;
  }

  public String getName() {
    return name;        
  }
 }

以下是一个尝试显示servlet设置的名称的jsp代码段:

<jsp:useBean id="namebean" class="BeanTesters.Bean" scope="request" />
    Person created by the Servlet : <jsp:getProperty name="namebean" property="name" />

我得到的结果是: 由Servlet创建的人员:null 为什么我得到一个null值?


阅读 207

收藏
2020-06-10

共1个答案

一尘不染

因为jsp:useBean标签试图"namebean"在请求的属性中获取bean
,并且由于您没有在该属性名称下存储任何内容,所以它创建了一个。因此,JSP使用的bean实例与在servlet中创建的实例不同。

将以下代码放入servlet中,您将获得所需的行为:

request.setAttribute("namebean", bean);

请注意,这些jsp:xxx标记已完全过时,不应再使用。您应该改用JSP表达式语言(EL)和JSTL:

Person created by the Servlet : ${namebean.name}

甚至更好,以确保名称中存在的潜在HTML字符已正确转义:

Person created by the Servlet : <c:out value="${namebean.name}"/>
2020-06-10