我只是尝试将自定义taglib添加到我的项目中,以便testtaglib.tld
文件包含:
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>name</shortname>
<tag>
<name>test</name>
<tagclass>taglib.TestTaglib</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>testCode</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
<taglib>
然后我添加了taglib类TestTaglib.java
public class TestTaglib extends TagSupport {
private String testCode;
public int doStartTag() throws JspException {
try {
JspWriter out = pageContext.getOut();
//doing some conversion with testCode
out.print(testCode);
return EVAL_PAGE;
} catch(IOException ioe) {
throw new JspException("Error: " + ioe.getMessage());
}
}
}
然后在.jsp
档案
<name:test testCode="${testCode}"/>
好的问题是:TestTaglib.java
将testCode
的值识别为${testCode}
而不是原始值。有什么建议吗?
答案 0 :(得分:2)
您好所有内置标签已经处理了表达式语言。只需更改下面提到的代码,它就可以正常工作。
public class TestTaglib extends TagSupport {
private String testCode;
public int doStartTag() throws JspException {
try {
JspWriter out = pageContext.getOut();
//doing some conversion with testCode
String value = (String) ExpressionUtil.evalNotNull("test", "testCode", testCode, String.class, this, pageContext);
out.print(value);
return EVAL_PAGE;
} catch(IOException ioe) {
throw new JspException("Error: " + ioe.getMessage());
}
}
}
ExpressionUtil是org.apache.taglibs.standard.tag.el.core包下提供的类。
这是evalNotNull方法args
的简短描述 1)tagName:您的标记名称是测试
2)tagAttribute:以eval为例,它是testCode
3)表达式:这是el表达式$ {testCode}
4)值:表达式类的值,无论是布尔值,字符串还是任何对象
5)tagClass:标记处理程序类的引用,以便您可以通过此
6)pageContext:来自TagSupport