использовать бин в JSP - PullRequest
3 голосов
/ 09 января 2012

У меня есть компонент, который содержит метод [void return] и я хочу получить доступ к этому компоненту в JSP.

public class A {

  public void run() {}
}

Добавьте приведенный ниже код в конфигурационный файл Spring.

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="exposeContextBeansAsAttributes" value="true"/>
</bean>
     <bean id="a" class="com.example.A"
 >
</bean>

теперь вмоя страница JSP:

${a.run}

, но это решение не работает. Пожалуйста, помогите мне получить доступ к Spring Bean на странице JSP.

Ответы [ 5 ]

4 голосов
/ 09 января 2012

Внедрите bean-компонент в ваш контроллер и представьте его как часть модели.

Но зачем вам вызывать run из JSP?

Ожидается JSP ELследовать соглашениям об именах JavaBean;этот пример не будет работать так, как вы ожидаете. Самый простой вариант - переименовать метод или предоставить дополнительный метод, который следует соглашению об именах JavaBean и вызывает run.

Изменить для ответа на комментарий.

Если вам нужно вызвать метод по ссылке, у вас есть два (разумных) варианта: ссылка на действие контроллера, которое вызывает внедренную службуили выполните Ajax-вызов метода контроллера, который вызывает внедренную службу.

Нет все еще никакой причины делать вызов службы непосредственно из уровня представления (JSP).

0 голосов
/ 01 февраля 2013

Вы пробовали это?

$ {a.run ()}

Я не использовал org.springframework.web.servlet.view.InternalResourceViewResolver (вместо этого используйте его суперкласс), но это работает, если ваш контроллер внедряет Java-объект profile, в котором реализован метод toJson(). Не понимаю, почему тот же синтаксис не будет работать, если a доступен для JSP и реализует run().

<script>
$(function() {
    var profileJson = ${profile.toJson()};
    ....
})
</script>

Это - то, как предварительно загрузить мою страницу с начальным содержанием и сохранить поездку к фону при загрузке страницы.

0 голосов
/ 25 октября 2012

@ Комментарий Дейва Ньютона: «У нас все еще нет никаких причин делать сервисный вызов непосредственно из слоя представления».Рассмотрим сценарий, в котором вы хотите разработать собственный тег (скажем, раскрывающийся список, который выбирает значения из класса обслуживания на основе значения атрибута тега в вашем основном веб-проекте).и вы предоставляете реализацию TAG в файле .tag.Сохранение вызова службы в файле .tag представляется предпочтительнее, чем обновление модели в каждом контроллере, вызываемом до отображения представления, использующего тег.Что вы предлагаете, используя AJAX-вызов onload в файле .tag для извлечения содержимого dorpdown?

0 голосов
/ 10 января 2012

Вы не можете вызвать метод с ${a.run}, вам нужно сделать #{a.run}.

0 голосов
/ 09 января 2012

Вы можете написать скриптлет для этого что-то вроде

<%
   ApplicationContext ctx = RequestContextUtils.getWebApplicationContext(request);
   A a = (A) ctx.getBean("yourBeanName");
%>

или использовать WebApplicationContextUtils, если запросы направляются через DispatcherServlet.

Вам следует обратиться к Spring MVC ,Это подойдет вам больше.

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