`
jhyimu2005
  • 浏览: 181535 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
社区版块
存档分类
最新评论

在jsp中使用自定义标签 实现反射机制

    博客分类:
  • jsp
阅读更多
其中存在两张表A和B,其中表B中字段的值是表A的某个字段,现在给你B中某字段的值和对象A,要你取出它在对象A中对应的属性值。在这种情况下你若选择使用反射机制会非常方面。一下是相应的代码:


import java.io.IOException;
import java.lang.reflect.Field;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class RFTag extends TagSupport {

	private static final long serialVersionUID = -2360561035810220875L;

	private Object object;
	
	private String property;

	public Object getObject() {
		return object;
	}

	public void setObject(Object object) {
		this.object = object;
	}

	public String getProperty() {
		return property;
	}

	public void setProperty(String property) {
		this.property = property;
	}
	
	public int doStartTag() throws JspException {
		
		JspWriter out = this.pageContext.getOut();

		try {
			if (object == null) {
				out.println("");
			} else {
//get the object of this field
				Field f = object.getClass().getDeclaredField(property);
				f.setAccessible(true);
//get the value of this field
				Object value = f.get(object);
				out.println(value == null ? "" : value.toString());
			}
		} catch (IOException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
		
		return SKIP_BODY;
	}

}

下面是WEB-INF目录下的文件fs.tld文件的内容,主要是定义的在jsp中使用的标签。代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "web-jsptaglibrary_1_2.dtd" >
<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>foundTag</short-name>
  <uri>http://www.foundersoftware.com/founder/tags</uri>
  <tag>
    <name>page</name>
    <tag-class>com.founder.abgent.core.web.tag.PageTag</tag-class>
    <attribute>
  		<name>action</name>
  		<required>true</required>
  		<rtexprvalue>true</rtexprvalue>
  	</attribute>
  	 <attribute>
  		<name>param</name>
  		<required>false</required>
  		<rtexprvalue>true</rtexprvalue>
  	</attribute>
  	  <attribute>
  		<name>color</name>
  		<required>false</required>
  	</attribute>
  </tag>
  
  <tag>
  	<name>rf</name>
  	<tag-class>com.founder.bcimp.core.web.tag.RFTag</tag-class>
  		<attribute>
  			<name>object</name>
  			<required>true</required>
  			<rtexprvalue>true</rtexprvalue>
  		</attribute>
  		<attribute>
  			<name>property</name>
  			<required>true</required>
  			<rtexprvalue>true</rtexprvalue>
  		</attribute>
  </tag>
</taglib>



具体的在jsp中的应用实例.代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.foundersoftware.com/founder/tags" prefix="fs"%>

<div>
	<c:if test="${not empty enterpriseCustomFieldList}">
		<table>
			<tr>
				<td colspan="2"><fmt:message key="crs.compound.enterprise.custom.field" /></td>
			</tr>
			<c:forEach items="${enterpriseCustomFieldList}" var="enterpriseCustomField">
				<tr>
					<th>${enterpriseCustomField.columnLabel }</th>
					<td><input type="text" name="${enterpriseCustomField.columnName}" maxlength="${enterpriseCustomField.length}" value[b]="<fs:rf object="${compound}" property="${enterpriseCustomField.columnName}" />"/[/b]></td>
				</tr>
			</c:forEach>
		</table>
	</c:if>
</div>
分享到:
评论

相关推荐

    商城之家JSP商城基于jsp+mysql开发

    互动性,这一层在STRUTS的视图层View用STRUTS标签+HTML等实现,同时使用validator验证框架进行 数据检验。数据的存储和持久化由HIENATER持久层实现,数据库采用MYSQL,数据源采用数 据源连接池机制,整个系统完全贯穿...

    JSP商城之家商城企业版

    互动性,这一层在STRUTS的视图层View用STRUTS标签+HTML等实现,同时使用validator验证框架进行 数据检验。数据的存储和持久化由HIENATER持久层实现,数据库采用MYSQL,数据源采用数 据源连接池机制,整个系统完全贯穿...

    JSP企富商贸网开发

    互动性,这一层在STRUTS的视图层View用STRUTS标签+HTML等实现,同时使用validator验证框架进行 数据检验。数据的存储和持久化由HIENATER持久层实现,数据库采用MYSQL,数据源采用数 据源连接池机制,整个系统完全贯穿...

    商城之家JSP商城企业版 v7.0

    页面调转由STRUTS的控制层Controller实现,页面负责显示请求和响应,大大增强“人机”的互动性,这一层在STRUTS的视图层View用STRUTS标签+HTML等实现,同时使用validator验证框架进行数据检验。数据的存储和持久化由...

    commons-beanutils-1.8.3 API.chm

    3、为JSP 和XSP创建自定义的标签时 4、在一些XML配置的资源文件中,比如Ant Build脚本、Web应用发布描述符、Tomcat的server.xml文件等。 Java提供了反射机制的APIs(可以参看java.lang.reflect和java.beans ...

    Java开发技术大全(500个源代码).

    DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors....

    商城之家JSP商城企业版V1.0

    互动性,这一层在STRUTS的视图层View用STRUTS标签+HTML等实现,同时使用validator验证框架进行 数据检验。数据的存储和持久化由HIENATER持久层实现,数据库采用MYSQL,数据源采用数 据源连接池机制,整个系统完全贯穿...

    J2EE应用开发详解

    80 5.6.9 config对象 80 5.7 JSP自定义标签 81 5.8 小结 84 第6章 XML、CSS和XSLT 85 6.1 XML 85 6.1.1 什么是XML 85 6.1.2 XML的产生 85 6.1.3 XML的用途 86 6.1.4 XML元素 87 6.1.5 XML属性 87 6.1.6 XML语法规则 ...

    java必了解的六大问题

    *第十一阶段:JSP开发:JSP语法和标签,自定义标签,EL,JSTL库了解以及MVC三层架构的设计模式理念; *第十二阶段:AJAX开发:AJAX原理,请求响应处理,AJAX开发库; *第十三阶段:轻量级框架,三大框架之一...

    Java开发技术大全 电子版

    12.3.3使用反射在运行时获得注释380 12.3.4AnnotatedElement接口383 12.3.5使用默认值383 12.3.6标记注释384 12.3.7单成员注释385 12.3.8内置注释386 12.3.9使用注释的一些限制390 12.4本章小结390 第13章...

    Java学习笔记-个人整理的

    {2.8}框架中移动的小球}{59}{section.2.8} {2.9}抽象与接口}{59}{section.2.9} {2.10}访问控制}{60}{section.2.10} {2.10.1}类的属性}{60}{subsection.2.10.1} {2.10.2}类的方法}{61}{subsection.2.10.2} {...

Global site tag (gtag.js) - Google Analytics