blog迁移至:
http://www.micmiu.com
也许你会问:为什么我要在页面里调用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见附件
其中beanName对应于spring中定义的名字,xxx对应于beanName中定义的方法,如果xxx方法没有参数,则param1、param2...等都省略,调用的结果保存在return定义的变量名RT_VAR中,以后可以用EL表达:$(RT_VAR)直接访问.
1.需要写一个类把spring context中定义的bean放在web application中/**
* 将spring context 中定义的bean放到Web的Application中.
*/
public class SpringCtxLoader extends WebApplicationObjectSupport {
/**
* Logger for this class
*/
private static final Logger logger = Logger
.getLogger(CodeTableLoader.class);
/**
* Web application 中的常量集合Map的名字.
*/
private static final String SPRING_CONTEXT = "springctx";
/**
* initialize application context .
*/
@SuppressWarnings("unchecked")
protected void initApplicationContext() {
try {
final WebApplicationContext ctx = this.getWebApplicationContext();
HashMap springServices = new HashMap() {
private static final long serialVersionUID = -1759893921358235848L;
public Object get(Object key) {
return ctx.getBean((String) key);
};
public boolean containsKey(Object key) {
return true;
}
};
logger.info("load code table (spring beans");
// 放入到Web全局变量中,供页面使用.
this.getServletContext().setAttribute(SPRING_CONTEXT,
springServices);
} catch (IllegalStateException e) {
logger.warn("not web app application context ,can't be load "
+ e.getLocalizedMessage());
}
}
}
2.spring 配置文件如下:(只显示本文相关的一些配置)
<!-- web application 全局常量列表 对象 -->
<bean name="springCtxLoader" class="utils.SpringCtxLoader"
lazy-init="false">
</bean>
<!-- UserAccountService 事务管理 -->
<bean name="userAccountService" parent="baseTransactionProxy">
<property name="target">
<bean class="service.UserAccountService">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</property>
</bean>
3.别忘了在jsp页面里引入标签:
<%@ taglib prefix="ct" uri="http://devsphere.com/articles/calltag/CallTag.tld"%>
具体页面的引用例子:
<ct:call object="userAccountService" method="getUserList" return="USER_LIST" />
所有的用户列表:<br>
<c:forEach var="vo" items="${USER_LIST}">
用户ID:${vo.userID},姓名:${vo.userName}<br>
</c:forEach>
<ct:call object="userAccountService" method="getUserMapByRole" param1="admin" return="USER_LIST" />
遍历管理员列表:<br>
<c:forEach var="vo" items="${USER_LIST}">
用户ID:${vo.key},姓名:${vo.value}<br>
</c:forEach>
对于符合java bean规范的,比如上面的getUserList方法,还可以用如下方法调用:
<c:set var="USER_LIST" value="${springctx.userAccountService.userList}" />
所有的用户列表:<br>
<c:forEach var="vo" items="${USER_LIST}">
用户ID:${vo.userID},姓名:${vo.userName}<br>
</c:forEach>
在上面的具体实例中用到了Map,在EL表达式中,Map集合对象中元素的访问可以用${VAR_MAP.key}的方式访问key对应的value,也可以用${VAR_MAP[key]}来访问,后者是通常的访问语法,也更为灵活,比如key是某个对象的某个属性,此时我们只能采用${VAR_MAP[vo.property]}来访问,而不能用${VAR_MAP.vo.property}
ps:需要特别注意的!!!如果要用这个标签,那么spring中定义的这个bean中,最好不要有相同方法名而参数不同的方法,此标签对此功能不支持,有可能会出错,暂时还没有解决此bug。
当然如果涉及到大量的查询结果,也不建议在页面用此标签。
分享到:
相关推荐
如果直接在JSP页面尝试调用DAO层的方法,很可能会遇到空指针异常,这是因为JSP页面无法直接获取到Spring容器管理的对象实例。因此,我们需要一种方法使得JSP页面能够间接地调用DAO层的方法。 #### 三、解决方案步骤...
这种做法使得在JSP页面中可以非常方便地调用Spring容器中的服务类,进而进行业务逻辑处理。 ### 方法二:手动启动Spring容器后获取 在某些特殊情况下,可能需要在Web应用之外手动启动Spring容器,进而获取容器中的...
总结来说,"spring+springmvc+mybatis整合(含简单jsp页面)"这个主题涵盖了Java Web开发中的核心框架集成,涉及Spring的IOC和AOP、SpringMVC的MVC架构以及MyBatis的SQL映射。通过合理的配置和组织,可以构建出高效...
在Servlet的`doGet`或`doPost`方法中,可以实例化一个Bean,设置其属性,然后将其放在请求或session范围,以便在JSP页面上使用。以下是一个简单的示例: ```java // Servlet代码 public void doGet...
在Java JSP开发中,Spring框架的使用是至关重要的,特别是对于管理Bean的生命周期。Spring中的Bean代表着应用中的对象,这些对象由Spring容器管理,提供了一种松耦合和依赖注入的机制。在本文中,我们将深入探讨...
总结来说,“JSP工程包含Spring配置信息”意味着这个项目是基于Spring框架构建的,使用JSP作为视图展示,并且其配置信息用于定义和管理项目中的对象和服务。理解并熟练掌握这些知识点对于Java Web开发至关重要。
- 配置Spring环境,包括设置Spring的bean定义文件(如applicationContext.xml),定义数据源、事务管理器等。 - 配置Hibernate,创建hibernate.cfg.xml文件来指定数据库连接,以及实体类对应的hbm.xml映射文件。 - ...
这样,我们就成功地在JSP页面中获取到了Spring管理的`MyService`对象,可以进一步调用其方法来执行业务逻辑。 需要注意的是,虽然在JSP中直接获取Spring bean是可行的,但这并不推荐。因为JSP的主要职责是呈现视图...
在这个Blog系统中,Struts用于处理HTTP请求,调用相应的业务逻辑,并将结果传递给JSP页面。 3. **Spring框架** Spring是一个全面的Java企业级应用开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等核心特性...
本文将详细介绍在JSP环境下实现定时执行任务的三种方法:利用`java.util.Timer`类、通过`ServletContextListener`接口以及采用Spring框架中的`ScheduledTimerTask`。 ### 1. 使用`java.util.Timer` `java.util....
"SpringMVC+Hibernate+Spring+JSP整合实例"是一个经典的后端技术组合,它涵盖了Java领域中多个核心框架的集成应用,旨在实现数据持久化、业务逻辑处理以及用户界面展示的无缝连接。下面我们将深入探讨这些技术及其...
在JSP页面中,我们可以通过EL(Expression Language)或JSTL(JavaServer Pages Standard Tag Library)来访问和操作Bean的属性。 JavaBean是一种符合特定规范的Java类,它具有默认构造器、getter和setter方法,...
在JSP页面中,虽然不直接与Spring交互,但Spring的模型对象(Model)会传递到视图层,供JSP展示。 3. **Hibernate**:是一个持久化框架,简化了Java对象与数据库之间的映射。它处理SQL查询和结果集转换,使得开发者...
在Spring MVC中,控制器接收用户请求,调用业务逻辑(通常由Spring Bean处理),并返回一个模型,该模型随后被渲染为视图。Spring MVC还提供了强大的数据绑定、表单验证和异常处理功能。 在学习Servlet、JSP和...
5. **控制流程**:SpringMVC的Controller接收请求,调用业务服务层(由Spring管理的Bean),服务层通过Hibernate操作数据库,然后返回结果给Controller,Controller再将数据传递给JSP页面展示。 这个框架组合的优势...
这通常是通过接口的实现、属性的动态添加和方法的动态调用来实现的。Spring框架中的`Prototype`作用域 bean 或者使用反射和代理技术来实现的类都属于动态Bean的范畴。 2. **数据库操作**: 在这个例子中,动态Bean...
12.2.2. 在Spring的application context中创建 SessionFactory 12.2.3. HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. ...
- **输出Bean属性**:展示Bean中的数据到前端。 #### 三、Bean的定义及规范 - **背景介绍**:Bean是遵循一定约定的Java类,通常用于表示数据模型或控制逻辑。 - **Bean的定义**: - **零参构造函数**:Bean必须有...
在Web开发中,EL(Expression Language)是一种用于在JSP页面中访问JavaBean属性和执行简单操作的语言。它简化了视图层与模型层的数据交互。然而,有时我们需要在EL表达式中调用Java方法,这通常是通过自定义EL函数...