一个类似于Logic与Bean的Jsp标签示例

一个类似于Logic与Bean的Jsp标签示例

示例说明:

首先通过Logic标准的校验,是否存在相应的属性,如果不存在,就不继续执行其中包含的内容体,如果存在则执行其中包含的内容体,调用方式如:

<mytest:logic>

<mytest:bean xpath="/Document/Element[@name=\"e2\"]">

</mytest:bean>

</mytest:logic>

这里有两个类,一个是MyLogic类,一个是MyBean,分别代表上面的logic及bean。

1、MyLogic源程序:

package test;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.PageContext;

import javax.servlet.jsp.tagext.BodyTagSupport;

import org.jdom.Document;

public class MyLogic extends BodyTagSupport {

/**

*

*/

private static final long serialVersionUID = 1L;

public MyLogic(){

super();

}

public int doStartTag() throws JspException{

Object object=getDataElement(pageContext);

/*如果属性不存在,就不继续其中包含的内容体了*/

if(object==null){

System.out.println("xmlDoc属性不存在");

return SKIP_BODY;

}

System.out.println("xmlDoc属性存在");

//EVAL_BODY_INCLUDE表示继续执行内容体

return EVAL_BODY_INCLUDE;

}

/*根据属性取对Document对象*/

public Document getDataElement(PageContext pageContext) {

Document root =null;

try{

root= (Document) pageContext.getRequest().getAttribute("xmlDoc");

}catch(Exception e){

}

return root;

}

}

2、MyBean源程序:

package test;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.BodyTagSupport;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.xpath.XPath;

public class MyBean extends BodyTagSupport{

/**

*

*/

private static final long serialVersionUID = 1L;

public MyBean(){

super();

}

String xpath;

public String getXpath() {

return xpath;

}

public void setXpath(String xpath) {

this.xpath = xpath;

}

public int doStartTag() throws JspException{

String thisXPath=getXpath();

System.out.println("传入的XPath:"+thisXPath);

Document xmlDoc=(Document) pageContext.getRequest().getAttribute("xmlDoc");

try {

String value=((Element)(XPath.selectSingleNode(xmlDoc, thisXPath))).getText();

/*输出根据XPath取的的值*/

pageContext.getOut().write(value);

/*如果该页面中其它地方不再使用该属性,记得删除,这是一个好习惯*/

pageContext.getRequest().removeAttribute("xmlDoc");

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return super.doStartTag();

}

}

3、tld文件的名称为mytest.tld,将其放在/WEB-INF/tagtld/test目录下,其内容为:

<?xml version="1.0" encoding="GB2312"?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"

"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>

<tlib-version>1.0</tlib-version>

<jsp-version>1.0</jsp-version>

<short-name>mytest</short-name>

<uri>http://mytest.com</uri>

<display-name>这是我的测试标签</display-name>

<description>

测试标签

</description>

<tag>

<name>logic</name>

<tag-class>test.MyLogic</tag-class>

<description>

My Logic

</description>

</tag>

<tag>

<name>bean</name>

<tag-class>test.MyBean</tag-class>

<description>

My Bean

</description>

<attribute>

<name>xpath</name>

<required>true</required>

</attribute>

</tag>

</taglib>

4、web.xml中加入如下配置:

<taglib>

<taglib-uri>/WEB-INF/tagtld/test/mytest.tld</taglib-uri>

<taglib-location>

/WEB-INF/tagtld/test/mytest.tld

</taglib-location>

</taglib>

5、测试JSP页面:

<%@ taglib uri="/WEB-INF/tagtld/test/mytest.tld" prefix="mytest"%>

<%@ page import="org.jdom.*"%>

<%@ page import="util.JDomUtil"%>

<%

String xmlString="<?xml version=\"1.0\" encoding=\"gb2312\"?><Document><Element name=\"e1\">first</Element><Element name=\"e2\">second</Element></Document>";

Document xmlDoc=JDomUtil.getDocument(xmlString);

//你可以将下面这一句屏蔽看一下效果

request.setAttribute("xmlDoc", xmlDoc);

%>

<mytest:logic>

<mytest:bean xpath="/Document/Element[@name=\"e2\"]">

</mytest:bean>

</mytest:logic>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值