1、新建一个标签的基类,主要是完成一些基本属性的赋值:
package cn.util.tag;
import javax.servlet.jsp.tagext.TagSupport;
/**
?* @author wtu
?* 2008-9-8
?*/
public class BaseTag extends TagSupport {
??? private String name="";
??? private String id="";
??? private String onchange="";
??? private String onclick="";
??? private String css="";
??? public String getCss() {
??? ??? return css;
??? }
??? public void setCss(String css) {
??? ??? this.css = css;
??? }
??? public String getId() {
??? ??? return id;
??? }
??? public void setId(String id) {
??? ??? this.id = id;
??? }
??? public String getName() {
??? ??? return name;
??? }
??? public void setName(String name) {
??? ??? this.name = name;
??? }
??? public String getOnchange() {
??? ??? return onchange;
??? }
??? public void setOnchange(String onchange) {
??? ??? this.onchange = onchange;
??? }
??? public String getOnclick() {
??? ??? return onclick;
??? }
??? public void setOnclick(String onclick) {
??? ??? this.onclick = onclick;
??? }
???
??? public String init(){
??? ??? StringBuffer outContent = new StringBuffer();
??????? if (this.getId() != null && !"".equals(this.getId())) {
??????????? outContent.append(" id='");
??????????? outContent.append(this.getId());
??????????? outContent.append("'");
??????? }
??????? if (this.getName() != null && !"".equals(this.getName())) {
??????????? outContent.append(" name='");
??????????? outContent.append(this.getName());
??????????? outContent.append("'");
??????? }
??????? if (this.getOnchange() != null && !"".equals(this.getOnchange())) {
??????????? outContent.append(" onchange='");
??????????? outContent.append(this.getOnchange());
??????????? outContent.append("'");
??????? }
??????? if (this.getOnclick() != null && !"".equals(this.getOnclick())) {
??????????? outContent.append(" onclick='");
??????????? outContent.append(this.getOnclick());
??????????? outContent.append("'");
??????? }
??????? if (this.getCss() != null && !"".equals(this.getCss())) {
??????????? outContent.append(" class='");
??????????? outContent.append(this.getCss());
??????????? outContent.append("'");
??????? }
???? ??? return outContent.toString();
??? }
}
2、一个下拉选择框的标签类,这里主要是完成数据字典的装载:
package cn.util.tag;
import java.util.*;
import javax.servlet.jsp.*;
/**
?* @author wtu
?* 2008-9-8
?*/
public class SelectTag extends BaseTag {
??? private String def="";
???
??? private String dictid="";
???
??? public String getDictid() {
??? ??? return dictid;
??? }
??? public void setDictid(String dictid) {
??? ??? this.dictid = dictid;
??? }
??? public String getDef() {
??? ??? return def;
??? }
??? public void setDef(String def) {
??? ??? this.def = def;
??? }
??? public int doStartTag() {
??????? return (SKIP_BODY);
??? }
??? public int doEndTag() throws JspException {
??? ??? Map dict=(Map)this.pageContext.getServletContext().getAttribute("dict");//从容器内存中读取字典信息
??????? StringBuffer outContent = new StringBuffer();
??????? JspWriter out = pageContext.getOut();
??????? outContent.append("<select ");
??????? outContent.append(this.init());
??????? outContent.append(">\r\n");
??????? outContent.append("<option value=''");
??????? if (this.getDef() == null)
??????????? outContent.append(" selected");
??????? outContent.append(">-请选择-</option>\r\n");
??????? if (dict == null)
??????????? return SKIP_BODY;
??????? List dictlist=(List) dict.get(this.getDictid());
??????
??????? if(dictlist==null)
??????? ??? return SKIP_BODY;
???????
??????? for(int i=0;i<dictlist.size;i++) {
??????? ??? DictInfoBean bean=(DictInfoBean) dictlist.get(i);
??????????? outContent.append("<option value='");
??????????? outContent.append(bean.getValue());
??????????? outContent.append("'");
??????????? if (this.getDef() != null && !"".equals(this.getDef()) &&
??????????????? this.getDef().equals(bean.getValue()))
??????????????? outContent.append(" selected");
??????????? outContent.append(">");
??????????? outContent.append(getName());
??????????? outContent.append("</option>\r\n");
??????? }
??????? outContent.append("</select>\r\n");
??????? try {
??????????? out.println(outContent);
??????? } catch (java.io.IOException ie) {
??????????? ie.printStackTrace();
??????????? throw new JspException(ie);
??????? }
??????? return SKIP_BODY;
??? }
}
3、标签文件(tags.tld)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
?? <tlibversion>1.0</tlibversion>
?? <jspversion>1.2</jspversion>
?? <shortname>dict</shortname>
?? <uri>/sz</uri>
?? <tag>
???? <name>select</name>
???? <tagclass>cn.util.tag.SelectTag</tagclass>
???? <info>get select value</info>
??? ???? <attribute>
??? ??? ?? <name>id</name>
??? ??? ?? <required>fasle</required>
??? ??? ?? <rtexprvalue>true</rtexprvalue>
??? ??? ? </attribute>
??? ??? <attribute>
??? ??? <name>def</name>
??? ??? <required>false</required>
??? ??? <rtexprvalue>true</rtexprvalue>
??? ??? </attribute>
??? ??? <attribute>
??? ??? <name>css</name>
??? ??? <required>false</required>
??? ??? <rtexprvalue>true</rtexprvalue>
??? ??? </attribute>
??? ??? <attribute>
??? ??? <name>name</name>
??? ??? <required>false</required>
??? ??? <rtexprvalue>true</rtexprvalue>
??? ??? </attribute>
??? ??? <attribute>
??? ??? <name>dictid</name>
??? ??? <required>true</required>
??? ??? <rtexprvalue>true</rtexprvalue>
??? ??? </attribute>
??? ??? <attribute>
??? ??? <name>onchange</name>
??? ??? <required>false</required>
??? ??? <rtexprvalue>true</rtexprvalue>
??? ??? </attribute>
??? ??????? <attribute>
??? ??? <name>onclick</name>
??? ??? <required>false</required>
??? ??? <rtexprvalue>true</rtexprvalue>
??? ??? </attribute>
?? </tag>
</taglib>
4、web.xml文件配置,添加如下代码:
??? ??? <taglib>
??? ??? ??? <taglib-uri>/sz</taglib-uri>
??? ??? ??? <taglib-location>/WEB-INF/tags.tld</taglib-location>
??? ??? </taglib>
5、JSP页面使用:
<%@ taglib prefix="sz" uri="/sz"%>
<sz:label dictid="sex" val="1"></sz:label>
本日志只讲述具体的实现方法,数据字典等代码和数据库结构没给出,请自行完成。
详细解决方案
java兑现自定义标签
热度:142 发布时间:2012-11-07 09:56:10.0
相关解决方案
- java 乱码 汉字是 ? 如何转换成汉字
- java web 登录次数限制,该如何解决
- java 工商银行网银支付 B2B的 都亟需什么,需要注意什么
- Java Applet程序从JDK6升级到7时遇到的有关问题
- java web 视频相干
- 请教一个关于链接后缀的有关问题(java web 应用)
- java 系统单点登录解决方案
- java.lang.NumberFormatException: For input string: "id"该如何处理
- java.lang.NoSuchMethodException: setId([Ljava.lang.String;)解决方法
- java 获取客户端IP解决办法
- JAVA 后台怎么获得前台页面FCKedit编辑器中的内容以及内容的样式
- java 正则化匹配有关问题
- java web 受阻
- java.lang.IllegalStateException: No output folder,该怎么解决
- java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.makeAccess,该如何解决
- java 乱码有关问题 急求大神
- java EE错误如何解决阿,都是过了,没有能解决的!
- java 工程打包有关问题 多谢各位大神!多谢
- JAVA WEB导航条,该怎么处理
- java.sql.SQLException: Access denied for user 'root'@'localhost' (using password,该如何处理
- java 中Node 有关问题
- 关于 java 引述传递和值传递,你的知否
- 吐了,java Timer 终止不了。
- Java Web 学习中有关问题,请高手指教
- java web中的url地址小疑点。
- java web开发解决办法
- java.lang.NullPointerException解决方法
- 关于 java cast 有关问题,你明白不
- java ftp 下传和上载乱码有关问题
- java web项目上的一些文件