JSP自定义标签(EL表达式问题和TLD文件说明)

首先说明这是一个HelloWorld程序。

解决的问题有:1.工程中无法使用EL表达式处理; 2.TLD应如何定义; 3.自定义一个JSP标签

 

1.EL表达式无法使用

(我使用的是今天晚上刚下载的tomcat.6.0.36版本,不过这个问题和tomcat版本没有关系)

1)之前总会出现的问题。我原来的解决方法是将web.xml文件中的版本号由2.5修改为2.4

例如:<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd">

但是这样感觉不大好。

2)现解决方法是将JAVA EE 5 Libraries中的JAR包复制到工程中的lib目录下就解决了这个问题。

(我的下载地址:http://download.csdn.net/detail/cl61917380/5227429)

 

 

2.TLD应如何定义

1)如上图,将tag.tld文件复制到WEB-INF目录下。

2)有的人问如何可以找到官方的TLD文件定义的格式。其实只要在文档头部添加xsd,告诉IDE我的XML应该如何定义就行了,这样在写XML文件的时候IDE会给我们提示。

 

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
    
	<tlibversion>1.0</tlibversion>
	<jspversion>1.1</jspversion>
	<tag>
		<name>tag</name>
		<tagclass>com.jungle.tag.PageTag</tagclass>
		<bodycontent>empty</bodycontent>
		<!-- 定义属性 -->
		<attribute>
			<name>currentPage</name><!-- 属性名字 -->
			<type>int</type><!-- 属性类型 -->
			<required>true</required><!-- 是否必须 -->
			<rtexprvalue>true</rtexprvalue><!-- 支持EL表达式 -->
		</attribute>
		<attribute>
			<name>pageCount</name><!-- 属性名字 -->
			<type>int</type><!-- 属性类型 -->
		</attribute>
	</tag>
</taglib>


3.创建标签类

 

 

public class PageTag extends TagSupport {
	private int currentPage = 1;
	private int pageCount = 10;

	@Override
	public int doStartTag() throws JspException {
		ServletResponse resp = this.pageContext.getResponse();
		try {
			PrintWriter writer = resp.getWriter();
			writer.print("doStartTag()..." + "currentPage = " + currentPage + " pageCount = " + pageCount);
			writer.flush();
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return super.doStartTag();
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public int getPageCount() {
		return pageCount;
	}

	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
	}

}

JSP页面:

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib uri="/WEB-INF/tag.tld" prefix="pt"%><!--引入自定义标签-->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!--这里用的是1.2的uri,1.1的uri是http://java.sun.com/jstl/core 我用这两个uri页面都正常-->
<%
	 request.setAttribute("currentPage",3);//当前页
	 request.setAttribute("content","查询关键字");//查询关键字
%>
         <pt:tag currentPage="${currentPage}" pageCount="123"/>
<br>

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值