【问题标题】:Inject a spring service in jsp page在jsp页面中注入spring服务
【发布时间】:2015-05-05 08:26:16
【问题描述】:

我正在使用 springmvc 开发一个应用程序,我想知道如何在我的 jsp 页面中注入一个 sping 服务。我尝试了一些方法,但它似乎不起作用

我的服务是这样的:

            @Service
            @Transactional
            public class CompteMarcheService {

                @Autowired
                private Compte_ProjetRep service;


                public int test()
                {
                    return 10;
                }

以及我在根上下文中添加的内容

       <bean class="
         org.springframework.web.servlet.view.InternalResourceViewResolver">
           <property name="exposedContextBeanNames">
              <list>
                 <value>CompteMarcheService</value>
              </list>
           </property>
        </bean>

最后是jsp页面

      <c:set var="clients" scope="request" value="${CompteMarcheService.test()}"/>

但是当我尝试像这样显示客户变量时:${clients} 我得到空字段,任何帮助我需要知道如何正确注入我的服务

谢谢。

【问题讨论】:

  • 谢谢,但是spring可以做到这一点,很多人都在使用它

标签: spring jsp spring-mvc


【解决方案1】:

来自spring documentation

5.10.6 命名自动检测到的组件

当一个组件作为扫描过程的一部分被自动检测到时,它的 bean 名称由已知的 BeanNameGenerator 策略生成 扫描器。默认情况下,任何 Spring 原型注解(@Component, @Repository、@Service 和 @Controller) 包含名称值 从而将该名称提供给相应的 bean 定义。

如果这样的注释不包含名称值或任何其他检测到的 组件(例如通过自定义过滤器发现的组件),默认 bean 名称生成器返回未大写的非限定类 姓名。例如,如果检测到以下两个组件,则 名称将是 myMovieLister 和 movieFinderImpl:

@Service("myMovieLister") 
public class SimpleMovieLister { }

@Repository 
public class MovieFinderImpl implements MovieFinder { }

尝试使用compteMarcheService 而不是CompteMarcheService

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="exposedContextBeanNames">
    <list>
      <value>compteMarcheService</value>
    </list>
  </property>
</bean>

<c:set var="clients" scope="request" value="${compteMarcheService.test()}"/>

【讨论】:

  • 谢谢,但我仍然有同样的问题,我得到一个空字段。
【解决方案2】:

如果您想将 xpose 类(bean)加入 JSP,您可以将其作为标签库进行,或者还有其他方法

<bean    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="exposeContextBeansAsAttributes" value="true"/>
</bean>

<bean id="myBean" class="com.x.MyClass"/>

这是一个帖子

How to inject spring beans into a jsp 2.0 SimpleTag?

【讨论】:

    【解决方案3】:

    刚刚使用注释做了同样的事情:

    @Bean
    public ViewResolver tilesViewResolver() {
      final UrlBasedViewResolver = new UrlBasedViewResolver();
      ...
      viewResolver.setExposeContextBeansAsAttributes(true);
      viewResolver.setExposedContextBeanNames("myBean");
      return viewResolver;
    }
    

    在我的 .jsp 中:

    <c:set var="myBeanData" scope="request" value="${myBean.myMethod()}"/>
    <a id="id" href="${myBeanData}">Link</a>
    

    【讨论】:

      猜你喜欢
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多