2011-10-23 35 views
1

我想創建一個自定義標籤庫,但在處理程序類中我想要具有整數屬性。JSP自定義標籤屬性類型整數

在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文件的屬性類型和默認應該是字符串。雖然我得到這樣一個錯誤:

Unable to find setter method for attribute: x 

我自己也嘗試修改屬性類型:<type>java.lang.Integer</type>和setter方法來:

public void setX(int x) { 
    } 

我也得到了同樣的錯誤。

我應該如何定義tld文件中的屬性以及處理程序類中的setter,以便我不會遇到setter錯誤?

+0

如果將getter返回類型更改爲String,會發生什麼情況? –

+0

同樣的錯誤:x沒有setter。 –

+0

所有類型匹配(getter返回,setter參數,輸入TLD)? –

回答

4

JSP自定義標籤使用JavaBeans技術,它具有標準約定(這裏是捕獲主要方面的a small JavaBeans tutorial)。

A「bean屬性」(見PropertyDescriptor)由getter和/或相同類型(吸氣必須的setter的單PARAM類型相匹配的返回型)的setter方法的,否則他們不會被映射到相同的bean屬性(我猜猜這個類中的第一個方法「勝出」)。所以你的Integer getter/String setter方法無法工作,因爲String setter不會被檢測爲屬於Integer屬性)。

將setter方法的參數類型設置爲Integer,它將工作,轉換將自動應用,JavaBean內置支持通過接口進行值轉換(實現至少存在所有原始值類型,並通過自動拆箱,Integer可以被認爲是原始的)。

+0

我會試試這個。而且這也適用於顏色類型java.awt.Color? –

+0

@AlinaDanila我不知道ColorEditor是否存在PropertyEditor,但您可以檢查。否則,使用String或Integer獲取器和setter並在其中進行轉換。 –

+0

我找到了['ColorEditor'](http://www.docjar.com/html/api/sun/beans/editors/ColorEditor.java.html),但它與Swing緊密結合,不幸的是 –