O Mentawai permite facilmente a criação de suas próprias tags de JSP. Abaixo iremos ver um exemplo de como criar dois tipos de tags: tags de display e tags condicionais.
Escreva a tag:
public class NumberOfFriendsTag extends PrintTag { public String getStringToPrint() throws JspException { Output output = action.getOutput(); User user = (User) output.getValue("user"); int nFriends = user.getNumberOfFriends(); if (nFriends == 1) { return "Você possui um amigo!"; } else if (nFriends == 0) { return "Você não tem nenhum amigo. Sai da frente do computador!"; } else { return "Você tem " + nFriends + " amigos!"; } } }
DICA: Você também pode criar uma tag que utiliza o conteúdo entre a tag. Para isso você pode usar o método getBody().
Repare que como você herdou de PrintTag, você automaticamente tem acesso às seguinte variáveis protected:
protected ServletContext application; protected HttpSession session; protected HttpServletRequest req; protected HttpServletResponse res; protected Action action; protected Locale loc;
NOTA: Se a página JSP for acessada diretamente (passando por fora do controlador) a action será null mas você pode utilizar normalmente as outras variáveis.
Crie o arquivo TLD:
Agora para utilizar a sua nova tag você precisa de um arquivo TLD. Isso é uma exigência da API de Servlets, logo salve o arquivo abaixo com o nome taglib.tld e coloque ele dentro da pasta WEB-INF/tld:
<?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.2</jsp-version> <short-name>myTags</short-name> <display-name>myTags</display-name> <tag> <name>showNumberOfFriends</name> <tag-class>com.mysite.tag.NumberOfFriendsTag</tag-class> <body-content>empty</body-content> <display-name></display-name> </tag>
Utilize a tag nos seus JSPs:
<%@ taglib uri="/WEB-INF/tld/taglib.tld" prefix="m" %> <html><body> <h1>Hello there!</h1> <h3><m:showNumberOfFriends /></h3> </body></html>
Escreva a tag:
public class IsComBr extends ConditionalTag { public boolean testCondition() throws JspException { String host = req.getRequestURL().toString(); return host.contains(".com.br"); } }
Repare que como você herdou de ConditionalTag você automaticamente tem acesso às seguinte variáveis protected:
protected ServletContext application; protected HttpSession session; protected HttpServletRequest req; protected HttpServletResponse res; protected Action action; protected Locale loc;
NOTA: Se a página JSP for acessada diretamente (passando por fora do controlador) a action será null mas você pode utilizar normalmente as outras variáveis.
Crie o arquivo TLD:
Agora para utilizar a sua nova tag você precisa de um arquivo TLD. Isso é uma exigência da API de Servlets, logo salve o arquivo abaixo com o nome taglib.tld e coloque ele dentro da pasta WEB-INF/tld:
<?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.2</jsp-version> <short-name>myTags</short-name> <display-name>myTags</display-name> <tag> <name>isComBr</name> <tag-class>com.mysite.tag.IsComBr</tag-class> <body-content>JSP</body-content> <display-name></display-name> <attribute> <name>negate</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> </attribute> </tag>
DICA: A class ConditionalTag já inclui o atributo negate que você deve configurar no TLD para que sua tag suporte else.
Utilize a tag nos seus JSPs:
<%@ taglib uri="/WEB-INF/tld/taglib.tld" prefix="m" %> <m:isComBr> <!-- Mostre ou faça alguma coisa aqui relacionada ao site .com.br --> </m:isComBr> <m:isComBr negate="true"> <!-- Mostre ou faça alguma coisa aqui relacionada aos demais sites --> </m:isComBr>