JSP自定义标记属性类型为整数

时间:2011-10-23 19:29:37

标签: java jsp attributes custom-tags

我想创建一个自定义标记库,但在处理程序类中,我希望有整数属性。

在tld文件中,我有以下代码:

<tag>
        <name>circle</name>
        <tag-class>draw.Circle</tag-class>
        <body-content>jsp</body-content>
        <attribute>
            <name>x</name>
            <required>true</required>
        </attribute>
</tag>

还有其他整数属性,但此示例与其他属性相关。

处理程序类目前看起来像这样:

public class Circle extends TagSupport{
    private Integer x;

    public Integer getX() {
        return x;
    }
    public void setX(String x) {
        this.x = Integer.parseInt(x);
        System.out.println("Set x");
    }
}

我没有在tld文件中指定属性类型,默认情况下应该是String。虽然我收到这样的错误:

Unable to find setter method for attribute: x

我还尝试将属性类型修改为:<type>java.lang.Integer</type>,将setter方法修改为:

public void setX(int x) {
    } 

我得到同样的错误。

我应该如何定义tld文件中的属性和处理程序类中的setter,以便我不会收到setter错误?

1 个答案:

答案 0 :(得分:4)

JSP自定义标记使用JavaBeans技术,该技术具有标准约定(此处为a small JavaBeans tutorial,用于捕获主要方面)。

“bean属性”(参见PropertyDescriptor)由同一类型的getter和/或setter方法组成(getter的返回类型必须与单个param类型匹配) setter),否则它们不会映射到相同的bean属性(我猜测类中的第一个方法是“wins”)。因此,您的Integer getter / String setter方法无法工作,因为String setter不会被检测为属于Integer属性。)

将setter方法的参数类型设置为Integer并且它将起作用,转换将自动应用,JavaBeans通过PropertyEditor接口内置对值转换的支持(at的实现)至少存在所有原始值类型,并且通过自动拆箱,Integer可以被视为原始值。