我想创建一个自定义标记库,但在处理程序类中,我希望有整数属性。
在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错误?
答案 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
可以被视为原始值。