【问题标题】:JSP custom tag attribute type integerJSP自定义标签属性类型整数
【发布时间】:2011-12-13 16:36:26
【问题描述】:

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

在 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

我也尝试将属性类型修改为:&lt;type&gt;java.lang.Integer&lt;/type&gt;,并将 setter 方法修改为:

public void setX(int x) {
    } 

我得到了同样的错误。

我应该如何定义tld文件中的属性和handler类中的setter,这样才不会得到setter错误?

【问题讨论】:

  • 如果将getter返回类型改为String会怎样?
  • 所有类型都匹配吗(getter return、setter param、type in TLD)?

标签: java jsp attributes custom-tags


【解决方案1】:

JSP 自定义标签使用JavaBeans 技术,该技术具有标准约定(这里是捕获主要方面的a small JavaBeans tutorial)。

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

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

【讨论】:

  • 我会试试这个。这也适用于颜色类型 java.awt.Color 吗?
  • @AlinaDanila 我不知道 Color 是否存在 PropertyEditor,但您可以检查一下。否则使用 String 或 Integer getter 和 setter 并在其中进行转换。
  • 我找到了ColorEditor,但不幸的是,它与 Swing 紧密集成
猜你喜欢
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
相关资源
最近更新 更多