jsp页面直接调用spring中定义的Bean的属性方法

也许你会问:为什么我要在页面里调用bean里的方法呢?请你耐心看下去,希望对你有帮助。

1.在项目中经常会遇到动态下拉框的情况,比如角色列表、部门列表、分类….,当然你也可以选择把这些变量request、session或者
application
但是这就涉及到何时放入变量、何时更新等问题,同时会占用容器的内存。特别是在查询条件的列表,运用下面的方法<ct:call/>再配合之前有一篇文章中的htmlx 标签就能非常好的解决此问题。

2.我们经常会遇到用户id关联到其他表比如:消息表,作为消息的创建人,我们在展现消息表时,可以用下面介绍的方法在页面得到
Map<userId,userName>,配合el表达式就能显示创建人的姓名,并不需要我们去关联查询。又比如我们经常会遇到给出用户
id,显示用户本身的详细信息,同样我们可以用下面介绍的方法<ct:call/>结合jstl或el表达式就能取得用户这个对象来完成此需
求。
这里举了几个简单的例子,基于上面的情况我们才需要这样的方法,下面就对这个方法的整个步骤进行详细的描述:
对于在spring xml配置文件中的bean里的属性方法,如果符合Java
Bean规范,直接用EL表达式调用,例如srpingctx.userAccountService.userList
这个代表调用userAccountService中的方法getUserList();

如果不符合Java Bean规范(不是getXxxxx()或者isXxxx())或者带有参数的方法,可以采用taglib标签

<ct:call object=”beanName” method=”xxx” param1=”p1″ param2=”p2″ return=”RT_VAR” />

此标签lib见附件:calltag.jar
其中beanName对应于spring中定义的名字,xxx对应于beanName中定义的方法,如果xxx方法没有参数,则param1、
param2…等都省略,调用的结果保存在return定义的变量名RT_VAR中,以后可以用EL表达:$(RT_VAR)直接访问.

1.需要写一个类把spring context中定义的bean放在web application中

2.spring 配置文件如下:(只显示本文相关的一些配置)

3.别忘了在jsp页面里引入标签:

具体页面的引用例子:

对于符合java bean规范的,比如上面的getUserList方法,还可以用如下方法调用:

在上面的具体实例中用到了Map,在EL表达式中,Map集合对象中元素的访问可以用${VAR_MAP.key}的方式访问key对应的value,也
可以用${VAR_MAP[key]}来访问,后者是通常的访问语法,也更为灵活,比如key是某个对象的某个属性,此时我们只能采
用${VAR_MAP[vo.property]}来访问,而不能用${VAR_MAP.vo.property}

 ps:需要特别注意的!!!如果要用这个标签,那么spring中定义的这个bean中,最好不要有相同方法名而参数不同的方法,此标签对此功能不支持,有可能会出错,暂时还没有解决此bug。

当然如果涉及到大量的查询结果,也不建议在页面用此标签。

原创文章,转载请注明: 转载自micmiu – 软件开发+生活点滴[ http://www.micmiu.com/ ]

本文链接地址: http://www.micmiu.com/j2ee/spring/spring-jsp-bean-method/

发表评论?

1 条评论。

  1. lz,报错了
    javax.servlet.jsp.JspException: Method not found: java.lang.String.getUserList()

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">