从jsp访问Spring MVC DI bean

Art*_*t79 14 templates jsp controller view spring-mvc

在某些MVC框架中,如果您希望执行某些代码并呈现某些部分视图,则可以从视图中调用控制器操作.我不确定在Spring MVC中执行它的正确方法是什么

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

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

ska*_*man 40

如果您希望这样做,Spring-MVC可以将应用程序上下文的bean公开给视图层.

例如,InternalResourceViewResolver可以指示在上下文中公开每个bean,或者仅指定指定的bean.查看exposeContextBeansAsAttributesexposedContextBeanNames属性.

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

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="exposedContextBeanNames">
      <list>
         <value>beanA</value>
         <value>beanB</value>
      </list>
   </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

或者,只是暴露每个bean:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="exposeContextBeansAsAttributes" value="true"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

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


小智 5

IMO在viewResolver bean配置中添加了使用exposedContextBeanNames(也有可能使用全局标志,而不是推荐)

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="exposedContextBeanNames">
 <list>
  <value>beanName</value>
 </list>
Run Code Online (Sandbox Code Playgroud)

在JSP中使用

${beanName.property}
Run Code Online (Sandbox Code Playgroud)