Получение нулевого значения для того места, где я ожидаю строку, установленную мутатором - PullRequest
0 голосов
/ 13 марта 2012

Ниже приведен класс сервлета, который устанавливает имя , вызывая метод для объекта класса 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;        
  }
 }

Ниже приведен фрагмент jsp, который пытается отобразить имя, установленное сервлетом:

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

Результат, который я получаю: Персона, созданная сервлетом: null Почему я получаю нулевое значение?

1 Ответ

1 голос
/ 13 марта 2012

Поскольку тег jsp:useBean пытается получить компонент в атрибуте "namebean" запроса, и поскольку вы ничего не сохранили под этим именем атрибута, он создает его.Таким образом, экземпляр компонента, используемый JSP, отличается от экземпляра, созданного в сервлете.

Поместите следующий код в свой сервлет, и вы получите желаемое поведение:

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}"/>
...