jsp自定义标签case、when的简单实现
场景:由于struts-1.0.0是笔者自己开发的java web框架,如果开发jsp页面的话,就需要引用jstl的jar,但是我发现常用标签大概只有三、四个,所以框架实现了if、round、case、foreach等标签,去除了对jstl的引用。 完整代码请查看:https://github.com/yydf/struts jsp页面使用方式:<%@ t...
·
场景:
由于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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)