JSP com Taglib dando erro JasperReport

Oi pessoal. Ao tentar acessar a minha jsp, ocorre erro
org.apache.jasper.JasperException: /adiciona-contato.jsp(22,17) Attribute id invalid for tag campoData according to TLD

Já tentei diversas mudanças como pesquisei aqui e em outros forums, mas nao consegui fazer funcionar, preciso de ajuda.

Seguem os codigos

adiciona-contato.jsp

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib tagdir="/WEB-INF/tags" prefix="caelum" %>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
<link type="text/css" href="css/ui-lightness/jquery-ui-1.9.2.custom.css" rel="stylesheet" />
<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.9.2.custom.js"></script>
</head>
<body>

<c:import url="cabecalho.jsp" />

<form action="adicionaContato">
Nome: <input type="text" name="nome" /><br />
E-mail: <input type="text" name="email" /> <br />
Endereço: <input type="text" name="endereco" /> <br />
Data Nascimento: <caelum:campoData id="dataNascimento" /><br />

<input type="submit" value="Gravar" />
</form>

<c:import url="rodape.jsp" />
</body>
</html>

campoData.tag

<input type="text" id="${id}" name="${id}" />
<script type="text/javascript">
$("#${id}").datepicker({dateFormat: 'dd/mm/yy'});
</script>

AdicionaContatoServlet.java

package br.com.caelum.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.caelum.servlet.dao.ContatoDAO;
import br.com.caelum.servlet.modelo.Contato;

public class AdicionaContatoServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		//busca o writer
		PrintWriter out = response.getWriter();
		
		//buscando os parametros no request
		String nome = request.getParameter("nome");
		String endereco = request.getParameter("endereco");
		String email = request.getParameter("email");
		
		String dataEmTexto = request.getParameter("datanascimento");
		System.out.println(dataEmTexto);
		System.out.println(nome);
		Calendar dataNascimento = null;
		
		//fazendo conversao da data
		try {
			Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
			dataNascimento = Calendar.getInstance();
			dataNascimento.setTime(date);
			
		} catch (ParseException e) {
			out.println("Erro de conversao de data");
			return; //para a execucao do metodo
	
		} //fim do TRY/CATCH
		
		//monta um objeto contato
		Contato contato = new Contato();
		contato.setNome(nome);
		contato.setEndereco(endereco);
		contato.setEmail(email);
		contato.setDataNascimento(dataNascimento);
		
		//salva o contato
		ContatoDAO dao = new ContatoDAO();
		dao.adiciona(contato);
		
		//imprime o nome do contato que foi adicionado
		RequestDispatcher rd = request.getRequestDispatcher("/contato-adicionado.jsp");
		rd.forward(request, response);
		}
	

}

outras pessoas tambem teve problema com o mesmo exercicio, acho que isso pode lhe ajudar.


Muito obrigado Jardel!