Ah! Templates!

Uma coisa que me irrita no que se refere a programação web em geral, especialmente server side includes, é que o HTML é misturado com o código. Assim sendo uma coisa que eu procuro sempre é criar um arquivo template onde há algumas strings que serão substituidas. Por exemplo, pegue esse template tirado lá do Tableless (e substitua o :

<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
	\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"pt\" lang=\"pt\">
<meta name=\"resource-type\" content=\"document\" />
<meta http-equiv=\"pragma\" content=\"no-cache\" />
<meta name=\"revisit-after\" content=\"1\" />
<meta name=\"classification\" content=\"Internet\" />
<meta name=\"robots\" content=\"ALL\" />
<meta name=\"distribution\" content=\"Global\" />
<meta name=\"rating\" content=\"General\" />
<meta name=\"author\" content=\"Diego Alberto Eis, Elcio Luiz Ferreira\" />
<meta name=\"language\" content=\"pt-br\" />
<meta name=\"doc-class\" content=\"Completed\" />
<meta name=\"doc-rights\" content=\"Public\" />

<head>
	<title>_TITULO_</title>
	<style type=\"text/css\">
	<!--
	body{
		background:#EEF;
		margin:0px;
		padding:0px;
		font-family:arial, verdana, helvetica;
		font-size:80%;
	}
	h1{
		background:#966;
		padding:10px;
		margin:0px;
		color:#EEF;
	}
	#esquerda{
		width:150px;
		float:left;
		margin:10px;
	}
	#direita{
		width:150px;
		float:right;
		margin:10px;
	}
	#centro{
		margin:10px 190px;
		padding:10px;
		border-top:1px solid black;
		border-left:1px solid black;
		border-right:1px solid black;
		border-bottom:1px solid black;
		background:#FFF;
	}
	#rodape{
		font-size:90%;
		color:#336;
		padding:10px 30px;
		border:1px solid black;
	}
	-->
        </style>
</head>

<body>
<h1>_CABECALHO_</h1>
<div id=\"esquerda\">
_ESQUERDA_
</div>
<div id=\"direita\">
_DIREITA_
</div>
<div id=\"centro\">
_CENTRO_
</div>
<div id=\"rodape\">
_RODAPE_
</div>
</body>
</html>

Pois é, agora pegue esse template aí, coloque ele na raiz do seu servidor JSP com o nome template.html e use o seguinte código JSP:

<%@page contentType=\"text/html\"
        import=\"java.io.*, java.util.*\"
        errorPage=\"ops.jsp\"
%>
<%
  String template = \"\";
  String thisLine = \"\"; 

  String paginaTitulo    = \"Oi Target\";
  String paginaCabecalho = \"Esse é o cabeçalho\";
  String paginaDireita   = \"Texto do lado direito da página\";
  String paginaCentro    = \"Texto principal da página\";
  String paginaEsquerda  = \"Texto do lado esquerdo da página\";
  String paginaRodape    = \"Texto de rodapé\";

  Date dateNow = new Date();
  paginaCentro = paginaCentro + \"<br />\"; 
  paginaCentro = paginaCentro + \"<br />\"; 
  paginaCentro = paginaCentro + 
                 \"Agora é \" + 
                 dateNow.getHours() + 
                 \":\" + dateNow.getMinutes(); 

  // Le o arquivo template
  BufferedReader br = new BufferedReader (
    new FileReader(
          getServletContext().
          getRealPath(\"/template.html\"))
  );
  while ((thisLine = br.readLine()) != null) {
   template = template + thisLine;
  }

  template = template.replaceFirst(\"_TITULO_\",    paginaTitulo);
  template = template.replaceFirst(\"_CABECALHO_\", paginaCabecalho);
  template = template.replaceFirst(\"_DIREITA_\",   paginaDireita);
  template = template.replaceFirst(\"_CENTRO_\",    paginaCentro);
  template = template.replaceFirst(\"_ESQUERDA_\",  paginaEsquerda);
  template = template.replaceFirst(\"_RODAPE_\",    paginaRodape);
%>
<%= template %>

Pronto! Assim temos a interface separada do processamento. Sim, eu sei, que isso é uma coisa óbvia, mas deixa eu ter um histórico da minha aula de JSP, pô! 😉

This entry was posted in Sem categoria. Bookmark the permalink.

Deixe um comentário