JSP - 自定义Taglib的问题

时间:2015-06-17 17:11:20

标签: java jsp

我只是尝试将自定义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.javatestCode的值识别为${testCode}而不是原始值。有什么建议吗?

1 个答案:

答案 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