jsp自定义标签case、when的简单实现

 

场景:

由于struts-1.0.0是笔者自己开发的java web框架,如果开发jsp页面的话,就需要引用jstl的jar,但是我发现常用标签大概只有三、四个,所以框架实现了if、round、case、foreach等标签,去除了对jstl的引用。

 

完整代码请查看:

https://github.com/yydf/struts

 

jsp页面使用方式:

<%@ taglib uri="http://libs.4coder.cn/static/jstl" prefix="s"%>

<s:case>
	<s:when test="${data.verbStatus == -1}">作业未上传</s:when>
	<s:when test="${data.verbStatus == 0}">未评论</s:when>
	<s:when test="${data.verbStatus == 1}">已评论,未发布</s:when>
	<s:else>已发布</s:else>
</s:case>

CaseTag实现:

public class CaseTag extends BodyTagSupport
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 5738376830292291109L;
	
	private boolean isOk;

	@Override
	public int doStartTag() throws JspException
	{
		isOk = false;
		return EVAL_BODY_INCLUDE;
	}

	public boolean isOk()
	{
		return isOk;
	}

	public void setOk(boolean isOk)
	{
		this.isOk = isOk;
	}

}


WhenTag实现:

public class WhenTag extends BodyTagSupport
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 4778987987915422993L;
	private static final Logger logger = Logger.getLogger(WhenTag.class);

	private String test;

	public void setTest(String test)
	{
		this.test = test;
	}

	@Override
	public int doStartTag() throws JspException
	{
		return EVAL_BODY_BUFFERED;
	}

	@Override
	public int doEndTag() throws JspException
	{
		CaseTag parent = (CaseTag) this.getParent();
		if (Boolean.parseBoolean(test) && parent.isOk() == false)
		{
			try
			{
				// 利用getString方法得到字符串
				String content = this.getBodyContent().getString();
				// 输出到浏览器
				this.pageContext.getOut().append(content.trim());
				parent.setOk(true);
			}
			catch (IOException e)
			{
				logger.error("输出if标签失败", e);
			}
		}
		return EVAL_PAGE;
	}
}


ElseTag实现:

public class ElseTag extends BodyTagSupport
{
	/**
	 * 
	 */
	private static final long serialVersionUID = -7339585316460624996L;
	private static final Logger logger = Logger.getLogger(ElseTag.class);

	@Override
	public int doStartTag() throws JspException
	{
		return EVAL_BODY_BUFFERED;
	}
	
	@Override
	public int doEndTag() throws JspException
	{
		CaseTag parent = (CaseTag) this.getParent();
		if (parent.isOk() == false)
		{
			try
			{
				// 利用getString方法得到字符串
				String content = this.getBodyContent().getString();
				// 输出到浏览器
				this.pageContext.getOut().append(content.trim());
				parent.setOk(true);
			}
			catch (IOException e)
			{
				logger.error("输出if标签失败", e);
			}
		}
		return EVAL_PAGE;
	}
}


tld(方便jsp进行提示):

<tag>
    <description>case</description>
    <name>case</name>
    <tag-class>com.xjcy.easystruts.jstl.tag.CaseTag</tag-class>
    <body-content>JSP</body-content>
  </tag>
  <tag>
    <description>when</description>
    <name>when</name>
    <tag-class>com.xjcy.easystruts.jstl.tag.WhenTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
        <description>A condition.</description>
        <name>test</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
  <tag>
    <description>else</description>
    <name>else</name>
    <tag-class>com.xjcy.easystruts.jstl.tag.ElseTag</tag-class>
    <body-content>JSP</body-content>
  </tag>

源码传送门:

https://github.com/yydf/struts

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值