从jsp访问Spring MVC DI bean


问题内容

在某些MVC框架中,如果您希望执行一些代码并渲染某些局部视图,则可以从该视图调用控制器动作。我不确定在Spring MVC中正确的方法是什么

我想要一组JSP模板。其中一些将是页面布局,一些将是诸如分页器,登录框,菜单,标签云等的小组件。这些组件中的每一个都需要一些bean或控制器动作才能将一些数据设置到ViewAndModel中,以便视图可以使用它。

问题是我不想在每个调用中都设置所有这些对象。我的注册控制器仅关心注册处理。所以,现在我该怎么做呢?如何从视图中调用DI
bean或控制器来准备局部视图?还是应该创建一些映射?还是我从完全错误的角度来解决问题?


问题答案:

如果您希望这样做,Spring-MVC可以将应用程序上下文的Bean暴露给视图层。

例如,InternalResourceViewResolver可以指示公开上下文中的每个bean,或仅公开指定的bean。看一下ExposureContextBeansAsAttributes暴露ContextBeanNames属性。

例如,假设您想将bean beanAbeanBJSP 公开。您将在上下文中声明视图解析器:

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

或者,只公开每个bean:

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

这是否一个好主意是另一个问题,但是Spring确实为您提供了选择。