TLD、Taglib 和属性 setter 方法有问题
Something wrong with TLDs, Taglibs and attribute setter method
我正在 JSP 尝试自定义标签。我遵循了一个教程,最后得到了这段代码:
标签库导入:
<%@taglib prefix="me" uri="/WEB-INF/tlds/myTLD.tld" %>
这里我实现了我的标签:
<body>
<h1>Testing custom tags</h1>
<me:MiTag titulo="Some title">
A test text
</me:MiTag>
</body>
这是我的 TLD 的样子(由 NetBeans 生成):
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" 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">
<tlib-version>1.0</tlib-version>
<short-name>mytld</short-name>
<uri>/WEB-INF/tlds/myTLD</uri>
<tag>
<name>MiTag</name>
<tag-class>MiTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>titulo</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
</taglib>
这是我的标签处理程序 class:
public class MiTag extends SimpleTagSupport {
private String titulo;
@Override
public void doTag() throws JspException {
JspWriter out = getJspContext().getOut();
try {
out.println("<h3>"+titulo+"</h3>");
out.println(" <blockquote>");
JspFragment f = getJspBody();
if (f != null) {
f.invoke(out);
}
out.println(" </blockquote>");
} catch (java.io.IOException ex) {
throw new JspException("Error in MiTag tag", ex);
}
}
/**
* @param titulo the Titulo to set
*/
public void setTitulo(String titulo) {
this.titulo = titulo;
}
}
嗯,这个 应该 有效。但是...:[=16=]
这里有什么问题?
我意识到出了什么问题:标签处理程序 class 不在包中。一旦我将 class 放入一个包中(例如,"tags"),并通过
引用它
<tag-class>tags.MiTag</tag-class>
...开始工作了!
我正在 JSP 尝试自定义标签。我遵循了一个教程,最后得到了这段代码:
标签库导入:
<%@taglib prefix="me" uri="/WEB-INF/tlds/myTLD.tld" %>
这里我实现了我的标签:
<body>
<h1>Testing custom tags</h1>
<me:MiTag titulo="Some title">
A test text
</me:MiTag>
</body>
这是我的 TLD 的样子(由 NetBeans 生成):
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" 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">
<tlib-version>1.0</tlib-version>
<short-name>mytld</short-name>
<uri>/WEB-INF/tlds/myTLD</uri>
<tag>
<name>MiTag</name>
<tag-class>MiTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>titulo</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
</taglib>
这是我的标签处理程序 class:
public class MiTag extends SimpleTagSupport {
private String titulo;
@Override
public void doTag() throws JspException {
JspWriter out = getJspContext().getOut();
try {
out.println("<h3>"+titulo+"</h3>");
out.println(" <blockquote>");
JspFragment f = getJspBody();
if (f != null) {
f.invoke(out);
}
out.println(" </blockquote>");
} catch (java.io.IOException ex) {
throw new JspException("Error in MiTag tag", ex);
}
}
/**
* @param titulo the Titulo to set
*/
public void setTitulo(String titulo) {
this.titulo = titulo;
}
}
嗯,这个 应该 有效。但是...:[=16=]
这里有什么问题?
我意识到出了什么问题:标签处理程序 class 不在包中。一旦我将 class 放入一个包中(例如,"tags"),并通过
引用它<tag-class>tags.MiTag</tag-class>
...开始工作了!