Как получить контекст приложения JSP внутри класса Java - PullRequest
1 голос
/ 24 января 2011

Я не очень знаком с JSP, поэтому давайте сделаем этот вопрос примером:

предположим, у меня есть файл JSP (index.jsp), в котором содержится следующее утверждение:

<% 
MyObject mO = new MyObject();
mO.sayHelloWorld();
%>

и в MyObject.java:

public class MyObject(){
    public void sayHelloWorld(){
        //something like getJSPApplicationContext.getOut.println("<p>Hello World</p>");
    }
}

Есть ли простой способ достичь этой цели (не передавая JSPApplicationContext моему классу?)

Может быть, я делаю что-то действительно неправильно, в любом случае, спасибо за вашу помощь:)

Ответы [ 3 ]

3 голосов
/ 24 января 2011

Позвольте мне использовать эту возможность, чтобы познакомить вас с V (View) в MVC (Model View Controller) .

Обычно вы должны помещать данные в представление, помещая bean-компонент представления в сеанс на вашем контроллере. Вы можете думать о своем классе MyObject как о компоненте представления, поскольку он содержит информацию, которую вы хотите отобразить в представлении. Контроллером в этом случае является ваш сервлет (у вас есть сервлет, верно?), И он будет содержать в своем методе doGet или doPost следующее;

MyObject myObject = new MyObject("Hello world");
request.setAttribute("myObject", myObject);

Следующим шагом будет отображение в JSP данных из bean-компонента вида. Для этого настоятельно рекомендуется использовать JSTL , а не помещать фрагменты кода. Тег JSTL <c:out> можно использовать для отображения данных в JSP. Ваш JSP может содержать следующее:

<p>
<c:out value="${myObject.message}"/>
</p>

Это вызовет метод getMessage() для объекта сеанса myObject и выведет его на страницу.

Просто для полноты ваш боб MyObject view может выглядеть так:

public class MyObject
{
  String message;

  public MyObject(String message)
  {
    this.message = message;
  }

  public String getMessage()
  {
    return message;
  }
}
2 голосов
/ 24 января 2011

Это не так, как он используется.

Для цели, которую вы продемонстрировали.

Вы должны включить Servlet или jsp или статический HTML только для печати Hello World как

<jsp:include page="/staticfile/helloworld.html" />

в helloworld.html

просто

hello world

или включите сервлет

<jsp:include page="/helloworldServlet" />

и в HelloWorld Servlet doGet()

out.println("hello world");

См. Также

0 голосов
/ 24 января 2011

Не передавая контекст методу класса и не сохраняя его в переменной ThreadLocal (что я считаю плохой идеей), я не понимаю, как вы могли бы это сделать.

Если вашему классу требуется доступ к контексту JSP, это, вероятно, означает, что класс должен быть фрагментом JSP или пользовательским тегом JSP (<custom:sayHello/>).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...