Pessoal,
tenho que montar uma SimpleTag com corpo. A tag deve conter um atributo chamado valor. Caso o valor seja maior ou igual a 7, o valor do atributo interno ao corpo da tag deve ser preenchido, pelo doTag(), com o valor ?APROVADO?, caso contrário, com o valor ?REPROVADO?.
O problema é que qualquer valor que eu digite, sempre é exibido REPROVADO. Sempre tá considerando a variável como nula. EU já tentei colocar uma gambiarra dentro do if, antes de setar o atributo, atribuindo valor = 7, mas sempre exibe REPROVADO.
Abaixo os códigos
SimpleTag
public class ValorTag extends SimpleTagSupport {
private double valor;
public void doTag() throws JspException, IOException {
if (valor >= 7 ) {
String situacao = "APROVADO";
getJspContext().setAttribute("situacao", situacao);
getJspBody().invoke(null);
}
else {
String situacao = "REPROVADO";
getJspContext().setAttribute("situacao", situacao);
getJspBody().invoke(null);
}
}
arquivo TLD
<taglib>
<tlib-version>1.2</tlib-version>
<uri>valor</uri>
<tag>
<name>media</name>
<tag-class>simpleTag.ValorTag</tag-class>
<body-content>scriptless</body-content>
</tag>
</taglib>
view que vai receber a média
<form action="exibe.jsp">
Média:<input type="text" name="media"/> <br />
<input type="submit" name="Enviar" value="Enviar"/>
</form>
view que vai exibir a situação
<%@ taglib prefix="tagMedia" uri="valor" %>
<tagMedia:media>${situacao}</tagMedia:media>
Ainda não resolvi o problema, mas corrigi alguns erros no código. Na classe Java da tag, como foi definido um atributo, tem que ter pelo menos o método set. E como a tag tem esse atributo, tinha faltado eu colocar no TLD.
O problema é que na view pra exibir a situação, não é reconhecido o atributo valor (Attribute valor invalid for tag media according to TLD) mesmo eu tendo declarado no TLD
<tagMedia:media valor="10">${situacao}</tagMedia:media>
Seguem os códigos corrigidos
classe Java
package simpleTag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class ValorTag extends SimpleTagSupport {
private double valor;
public void setValor(double valor) {
this.valor = valor;
}
public void doTag() throws JspException, IOException {
if (valor >= 7 ) {
String situacao = "APROVADO";
getJspContext().setAttribute("situacao", situacao);
getJspBody().invoke(null);
}
else {
String situacao = "REPROVADO";
getJspContext().setAttribute("situacao", situacao);
getJspBody().invoke(null);
}
}
}
arquivo TLD
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib>
<tlib-version>1.2</tlib-version>
<uri>valor</uri>
<tag>
<name>media</name>
<tag-class>simpleTag.ValorTag</tag-class>
<body-content>scriptless</body-content>
</tag>
<attribute>
<name>valor</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</taglib>
view pra exibir a situação
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="tagMedia" uri="valor" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Dados</title>
</head>
<body>
<tagMedia:media valor="10">${situacao}</tagMedia:media>
</body>
</html>
O arquivo TLD estava com a tag <attribute> fora da <tag></tag>
Agora tá funcionando. Nem precisa do arquivo index, é só executar diretamente pelo exibe.jsp
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.2</tlib-version>
<uri>valor</uri>
<tag>
<name>media</name>
<tag-class>simpleTag.ValorTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>valor</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
Eu precisava de ajuda enquanto a isso, meu código esta semelhante ao seu. mais sempre com a mensagem de erro:
Cannot find a setter method for the attribute entidade of the tag handler taglibs.MenuLateralTag
Compilar ate compila. mais rodando da erro.
Se alguém puder me ajudar, agradeço…