как получить объект и вызвать метод в JSTL EL в JSP - PullRequest
0 голосов
/ 05 октября 2010

Я пытаюсь преобразовать следующий код скриптлета в EL. Я попробовал следующее (ниже), но не могу заставить его работать. getValue () - это метод из ConfigFactory, который возвращает строку:

В слушателе я установил configFactory как event.getServletContext().setAttribute("ConfigFactory", new ConfigFactory());

В моем коде скриптлета есть: (и он отлично работает)

<% 
  ConfigFactory cf = (ConfigFactory) application.getAttribute("ConfigFactory");
%>
Value from scriptlet= <%=cf.getValue()%> <br/>

EL доставляет мне неприятности:

<c:set var="cf" value="${initParam['ConfigFactory']}"/>
<c:out value="${cf.getValue}"/>  <!-- try # 1 -->
<c:out value="${cf.value}"/>     <!-- try # 2 -->

Ответы [ 2 ]

1 голос
/ 07 октября 2010

Эта строка

<c:set var="cf" value="${initParam['ConfigFactory']}"/>

делает то же самое, что и

pageContext.setAttribute("cf", application.getInitParameter("ConfigFactory"));

Вы не хотите этого.Избавьтесь от этой линии.В EL у вас есть неявный прямой доступ ко всем атрибутам запроса, сеанса и приложения только по его имени.Следующие

${ConfigFactory}

в основном аналогичны

out.print(pageContext.findAttribute("ConfigFactory"));

PageContext#findAttribute() тесты соответственно PageContext#getAttribute(), HttpServletRequest#getAttribute(), HttpSession#getAttribute() и, наконец,ServletContext#getAttribute() до тех пор, пока не будет найдено первое ненулевое значение.Это больше, чем вы хотите.

Наконец, вы можете получить доступ к методу getValue() для него обычным способом EL:

${ConfigFactory.value}

Не связано с проблемой, но вы обычно присваиваете идентификаторам экземпляров имя, начинающееся со строчной буквы,Вы тоже не делаете ConfigFactory ConfigFactory = new ConfigFactory();, верно?:)

0 голосов
/ 05 октября 2010

Не тестировалось:

${applicationScope.ConfigFactory.value}
...