- 浏览: 1436957 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (409)
- Java (48)
- Spring (29)
- struts2 (17)
- hibernate (4)
- 设计模式 (24)
- jbpm (1)
- JavaScript (5)
- 统计报表 (7)
- ExtJS_3.0 (35)
- struts1 (1)
- 分析设计 (3)
- Flex3 (24)
- UML (2)
- 数据库 (18)
- PowerDesigner (2)
- 应用服务器 (3)
- WebService (5)
- ActiveMQ_5.3.2 (6)
- Java通信技术 (11)
- GWT (6)
- OSGi (15)
- android (11)
- liferay6.0.6 (13)
- jquery (13)
- Linux (3)
- java.util.concurrent (16)
- guava (9)
- 开发模式 (1)
- 大数据 (2)
- 互联网金融 (4)
- treegrid-3.0 (7)
- 分布式 (8)
- GO语言 (4)
- maven (1)
- 缓存技术 (6)
- 其他 (2)
- 前端页面 (1)
- heasy (1)
- spring cloud(F版) (21)
- springboot (12)
- springmvc (5)
- mybatis (3)
- dubbo (1)
- 物联网 (0)
最新评论
-
raymond.chen:
谢谢您的分享
使用Ngrok解决通过外网访问内网web应用 -
wangyudong:
速度有点慢,不过在也找到了一个开源的holer,配置一个key ...
使用Ngrok解决通过外网访问内网web应用 -
a1006458222:
...
Axis2的部署和应用 -
偷师来了:
不好意思 这样的博客我觉得就灭有必要分享出来了 命令大家都会看 ...
Consul框架介绍 -
lliiqiang:
怎么直接删除文件夹啊?固定的几个文件可以删除,不固定的呢?需要 ...
Flex AIR —— 文件读写
使用该自定义标签,可以在JSP页面中动态执行某个Spring Bean对象的一个方法,方法返回的结果存储在ValueStack中。该自定义标签在Spring2、Struts2、Hibernate3环境下测试通过。
一、java源代码
1、ServiceTag源代码
public class ServiceTag extends BaseBodyTagSupport { private String beanName; private String methodName; private String id; public List params = new ArrayList(); public void setBeanName(String beanName) { this.beanName = beanName; } public void setMethodName(String methodName) { this.methodName = methodName; } public void setId(String id) { this.id = id; } public int doEndTag() throws JspException { Object bean = null; Method method = null; //取得bean对象 try{ bean = SpringContextUtil.getBean(beanName); }catch(Exception ex){ throw new JspException("get bean error: " + beanName); } //通过反射取得方法 if(bean != null){ try { method = bean.getClass().getMethod(methodName, TagUtil.getParameterTypes(params)); }catch(Exception e) { throw new JspException("get method error: " + beanName + "." + methodName); } }else{ throw new JspException("ServiceTag Error: bean [" + beanName + "] is null"); } //通过反射执行方法,得到结果 Object result = null; if(method != null){ try { result = method.invoke(bean, TagUtil.getParameterValues(params)); }catch(Exception e){ throw new JspException("method invoke error"); } } //将结果存储在ValueStack中 ValueStack vs = TagUtils.getStack(pageContext); vs.getContext().put(id, result); return EVAL_PAGE; } }
2、ServiceParamTag源代码
public class ServiceParamTag extends BaseBodyTagSupport { private String name; private Object value; private String type; public void setName(String name) { this.name = name; } public void setValue(Object value) { this.value = value; } public void setType(String type) { this.type = type; } public int doEndTag() throws JspException { Tag parent = getParent(); if(parent instanceof ServiceTag){ Map p = new HashMap(); p.put("paramName", name); p.put("paramValue", value); p.put("paramType", type); ((ServiceTag)parent).params.add(p); } return EVAL_PAGE; } }
3、公共方法源代码
//参数类型数组 public static Class[] getParameterTypes(List params) throws Exception{ Class[] c = new Class[params.size()]; for(int i=0;i<params.size();i++){ Map p = (Map)params.get(i); String type = (String)p.get("paramType"); c[i] = Class.forName(type); } return c; } //参数值数组 public static Object[] getParameterValues(List params) throws Exception{ Object[] o = new Object[params.size()]; for(int i=0;i<params.size();i++){ Map p = (Map)params.get(i); o[i] = p.get("paramValue"); } return o; }
二、tld文件源代码
<tag> <name>serviceBean</name> <tag-class>com.cjm.web.taglib.ServiceTag</tag-class> <body-content>JSP</body-content> <attribute> <name>beanName</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>methodName</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>id</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>serviceParam</name> <tag-class>com.cjm.web.taglib.ServiceParamTag</tag-class> <body-content>JSP</body-content> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>value</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>type</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag>
三、范例
1、java源代码
public class RoleService extends BaseService { private RoleDao roleDao; public RoleDao getRoleDao() { return roleDao; } public void setRoleDao(RoleDao roleDao) { this.roleDao = roleDao; } public Role getRole(String roleId){ return (Role)get(Role.class, roleId); } }
2、JSP页面源代码
<cjm:serviceBean beanName="roleService" methodName="getRole" id="result"> <cjm:serviceParam name="roleId" value="ADMIN" type="java.lang.String"/> </cjm:serviceBean> <s:property value="#result.roleName"/>
评论
2 楼
itc10
2015-10-21
//取得bean对象
24. try{
25. bean = SpringContextUtil.getBean(beanName);
26. }catch(Exception ex){
27. throw new JspException("get bean error: " + beanName);
28. }
SpringContextUtil ????,再加载applicationContext.xml一次??这在web项目会不会造成两个spring容器?,我也是醉了。
24. try{
25. bean = SpringContextUtil.getBean(beanName);
26. }catch(Exception ex){
27. throw new JspException("get bean error: " + beanName);
28. }
SpringContextUtil ????,再加载applicationContext.xml一次??这在web项目会不会造成两个spring容器?,我也是醉了。
1 楼
dayang2001911
2008-10-07
你也可以用ajax方式来实现吧,或者用dwr框架,直接就和spring集成的,可以调用bean的方法的啊,当然你这么做也应该可以了。
发表评论
-
在Struts2中对Ajax请求的异常进行统一处理
2016-04-18 18:32 7191、自定义异常类 public class AjaxExc ... -
struts2原理
2015-10-15 22:00 753一个Struts2请求处理的步骤大致如下: 1、 ... -
struts2 + poi 数据导出excel
2013-03-18 17:47 1537java源码: import java.io.ByteAr ... -
在Freemarker中使用JSP标签库
2010-06-02 17:24 7082Freemarker作为Struts2的其中一种结果类型,可以 ... -
Struts2 Convention插件的使用
2010-05-17 23:58 72951、常量说明 struts.convention ... -
学习笔记:杂项
2010-04-23 20:40 2752一、在web.xml文件配置Str ... -
Struts2插件的开发
2010-04-21 21:16 3266一、插件类 /** * 使用Struts2的Plugin ... -
读书笔记:Struts2拦截器
2008-11-10 21:19 15641、拦截器相关基础类 Interceptor接口 ... -
自定义标签:联动下拉框(二)
2008-10-27 09:48 3250四、下拉框数据获取方法的源代码 public String f ... -
自定义标签:联动下拉框(一)
2008-10-26 12:22 3453该标签主要实现以下功能:当父下拉框的当前值发生变化时 ... -
基于Struts2的通用文件上传实现(二)
2008-10-25 11:36 2588四、Action配置 <action name=&quo ... -
自定义标签:下拉框月份选择控件
2008-10-21 22:17 2890一、标签源代码 public class CalendarMo ... -
自定义标签:下拉框年份选择控件
2008-10-21 22:13 5725一、标签源代码 public cl ... -
基于Struts2的通用文件上传实现(一)
2008-10-21 21:19 5829该文件上传实现可以限制上传文件的类型,限制上传文件的最 ... -
自定义标签:分页标签
2008-10-21 09:58 4585一、标签类源代码 public class PageNavig ... -
Struts2标签的使用
2008-09-25 12:36 19321、iterator标签:用于对集合进行迭代 &l ...
相关推荐
首先,JSP是Java的一种视图技术,它允许开发人员在HTML或XML页面中嵌入Java代码,以动态生成网页内容。Servlet则作为服务器端的Java组件,负责处理HTTP请求和生成响应,是JSP背后的执行引擎。两者结合,为Web应用...
在Spring Boot中,我们通常会自定义`WebMvcConfigurer`或`WebMvcConfigurationSupport`来替代传统的`web.xml`配置,例如,可以创建一个`ApplicationConfig`类,重写`addViewControllers`方法,直接映射URL到JSP页面...
Spring框架也有自己的标签库,如Spring Taglib,可以简化JSP页面中的Spring Bean引用。而在Freemarker中,可以通过扩展其API创建自定义指令,实现更复杂的逻辑或功能。 总结一下,Struts2、Spring和Freemarker的...
自定义标签的实现主要是通过扩展Struts2的标签支持,创建自定义的TagSupport类,这允许我们在JSP页面上直接使用自定义标签,简化页面的编程逻辑。 Spring框架则在后台提供服务层的支持,包括依赖注入(DI)、面向切...
在这个项目中,开发者通常会利用JSP的内置对象、JavaBean或者自定义标签来从后台数据库获取数据,并在页面上动态生成菜单结构。以下是这个主题涵盖的一些关键知识点: 1. **JSP(JavaServer Pages)**:JSP是一种...
本压缩包"spring标签.zip"包含的文件"spring标签"可能是指Spring框架中的自定义标签库,如spring.tld,这个TLD文件(Tag Library Descriptor)是用来描述Spring标签库的元数据。 Spring框架的标签主要分为两大部分...
Struts 是一个经典的Java Web开发框架,它提供了一套丰富的标签库来简化JSP页面的编写,特别是对于处理用户输入和展示数据。其中,HTML标签库是Struts中非常重要的一部分,它专门用于创建与Struts框架交互的HTML输入...
HTML标签在JSP中也广泛使用,与JSP标签结合可以构建复杂的动态页面。 5. Struts 2标签库: Struts 2框架提供了丰富的标签库,如`s:property`、`s:form`、`s:textfield`等,这些标签简化了MVC模式中的视图层开发。 ...
J2EE页面标签大全涵盖了各种常用的JSP标准标签库(JSTL)以及自定义标签,它们使得开发者能够更加简洁地编写动态网页。下面我们将深入探讨这些标签及其用法。 1. JSTL(JavaServer Pages Standard Tag Library) -...
2. **使用自定义标签**:在JSP页面中引入标签库,使用自定义标签进行业务逻辑处理。 **六、JSP与MVC框架** 1. **Struts、Spring MVC**:这些基于JSP的MVC框架,提供了更完善的架构和组件,简化开发流程。 **七、...
Java自定义注解和Spring的BeanPostProcessor是Java企业级开发中的两个重要概念,它们在构建灵活、可扩展的应用程序中发挥着关键作用。本文将深入探讨这两个话题,并结合源码分析,帮助开发者更好地理解和应用。 ...
Servlet+JSP与Spring+MVC是两种在Java Web开发中常见的技术栈,它们用于构建动态、交互式的Web应用程序。本指南将深入介绍这两种技术及其整合应用,通过配套的源码帮助初学者更好地理解概念和实践操作。 Servlet是...
8. **JSTL(JavaServer Pages Standard Tag Library)**:JSTL提供了一套标准的标签库,包括核心标签、XML处理标签、JDBC标签和JMS标签等,旨在减少在JSP页面中使用脚本元素。 9. **MVC(Model-View-Controller)**...
这一章讲述了Servlet与JSP的协同工作方式,包括Servlet如何转发或重定向到JSP页面,以及如何在Servlet中设置数据供JSP显示。同时,讲解了MVC(Model-View-Controller)设计模式在JSP开发中的应用。 ### 第8章:JSP...
JSP动作标签负责处理服务器端的任务,如`<jsp:useBean>`用于实例化JavaBean,`<jsp:setProperty>`设置Bean的属性,`<jsp:getProperty>`读取Bean的属性,`<jsp:forward>`转发请求,以及`<jsp:include>`动态包含页面。...
- 在这个BBS项目中,可能用到了JSP的动作指令来操作JavaBean,如`<jsp:useBean>`定义和初始化Bean,`<jsp:setProperty>`设置Bean属性,`<jsp:getProperty>`获取Bean属性。 4. **JSP内置对象**: - JSP提供了九个...
开发者可以创建一个自定义标签,接收参数如当前页、每页条数等,然后在后台计算总页数,查询相应范围的数据,最后在页面上展示。这种方式可以避免在JSP中嵌入过多的Java代码,提升代码的可读性。 5. **DAO和Service...
- **服务阶段**:每次用户请求JSP时,都会调用Servlet的`service()`方法,执行JSP中的动态内容。 - **销毁阶段**:当服务器关闭或Servlet不再需要时,Servlet实例会被销毁。 3. **JSP指令**: - **page指令**:...
4. **扩展Struts的生命周期**:在某些场景下,可能还需要利用Spring的事件监听机制来扩展Struts的生命周期,比如在某个Action执行前后执行一些自定义逻辑。 通过上述步骤,我们不仅可以在Web应用层面集成Spring,还...