通过JSTL调用Spring里的bean

来源:互联网 发布:淘宝两钻买家有什么用 编辑:程序博客网 时间:2024/06/06 14:20

Spring提供了一个WebApplicationObjectSupport类来供我们使用,用来把定义在spring中的对象与前台页面联系起来。

为了在页面中可以方便的通过EL表达式取出spring里的bean,我们需要借助HashMap的特性并重写其方法。

 

首先,需要一个继承WebApplicationObjectSupport的类,并重写其initApplicationContext()方法,并把该类配置在Spring中,且lazy-init=false,自动加载。

该类的主要作用就是把一重写了get方法的HashMap以"springctx"的名字存放着ServletContext中,在页面通过类似于"${springctx.xxxxx}"就可以调用到spring里的bean。

 

XML

 标准的HashMap中key和value都是通过初始化或put方法等定义好的值,在调用get方法时会先调用containsKey(Object key)来判断map中是否存在该key对应的value,不存在的话,返回null。

而在SpringCtxLoader中,我们重写了springServices的get方法以使在调用其get方法时,会返回spring里的对应的bean,而不是其内部已存有的某种对象。所以我们还要重写containsKey(Object key)方法,使其一直返回true,否则我们将不会得到spring里的bean,而是null。

=========

此时我们就可以用"${springctx.xxxx}"来访问spring里的对象了。

EL表达式中可以采用两种方式访问一个Map,一种方式是${map.key}另一种方式式${map[“key”]},其中后者应用更为广泛,比如如果key为一个包含“.”或者空格的字符串,则不能用前者,比如map.cicy.name会被解释为map的key为city的对象的属性name的值

=========

 

还可以结合<ct:call>标签来调用bean里的非getxxx()形式的方法。

 

原创粉丝点击