一.不需要用到Spring中的bean
1.创建标签逻辑处理类继承javax.servlet.jsp.tagext.TagSupport类,类中根据需要定义需要从页面标签中传入的变量,可选择重写下列三种方法。
/** * 循环标签 * * @author FuShaoxing xinyu2010@126.com * @version 1.0 2015-8-14 23:17:14 */ public class ForTag extends TagSupport { private int i = 0; private int count; private String var; /** * 遇到标签开始时会呼叫的方法 * 其合法的返回值是EVAL_BODY_INCLUDE与SKIP_BODY * 前者表示将显示标签间的文字,后者表示不显示标签间的文字 */ @Override public int doStartTag() throws JspException { if (count == 0 || var == null) return SKIP_BODY; if (i < count) { pageContext.setAttribute(var, ++i); } return EVAL_BODY_INCLUDE; } /** * 这个方法是在显示完标签间文字之后呼叫的 * 其返回值有EVAL_BODY_AGAIN与SKIP_BODY * 前者会再显示一次标签间的文字,后者则继续执行标签处理的下一步 */ @Override public int doAfterBody() throws JspException { if (i < count) { pageContext.setAttribute(var, ++i); return EVAL_BODY_AGAIN; } return SKIP_BODY; } /** * 遇到标签结束时呼叫的方法 * 其合法的返回值是EVAL_PAGE与SKIP_PAGE * 前者表示处理完标签后继续执行以下的JSP网页,后者是表示不处理接下来的JSP网页 */ @Override public int doEndTag() throws JspException { release(); return EVAL_PAGE; } @Override public void release() { i = 0; count = 0; var = null; } public void setCount(int count) { this.count = count; } /** * 用来接收页面传值 */ public void setVar(String var) { this.var = var; } }
2.创建tld后缀的标签定义xml文件
<?xml version="1.0" encoding="UTF-8"?> <!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>spoon</short-name> <description>Spoon tag</description> <tag> <name>for</name> <tag-class>com.spoon.utils.tag.ForTag</tag-class> <body-content>JSP</body-content> <description>简单循环</description> <attribute> <name>count</name> <!--是否必填--> <required>true</required> <!--是否接受el表达式--> <rtexprvalue>true</rtexprvalue> <description>循环次数</description> </attribute> <attribute> <name>var</name> <required>true</required> <description>参数名</description> </attribute> </tag> </taglib>
3.在web.xml中引入tld文件
<jsp-config> <taglib> <taglib-uri>/tags/spoon</taglib-uri> <taglib-location>/WEB-INF/tld/spoon-tags.tld</taglib-location> </taglib> </jsp-config>
4.在jsp页面中加入以下声明来引入自定义标签
<%@ taglib prefix="spoon" uri="/tags/spoon"%>
5.在jsp页面中使用标签
<spoon:for count="5" var="x" />
二、需要用到Spring中的bean
将上一节中的第一步继承的类改为org.springframework.web.servlet.tags.RequestContextAwareTag。此类为抽象类,必须实现doStartTagInternal()方法,相当于上一节中的doStartTag()。
继承此类就可以使用getRequestContext().getWebApplicationContext().getBean(“dictionary”);的方法来获取上下文中的bean。
转载请注明来源:http://www.foospoon.com/?p=86
暂无评论