2011-10-23 19 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ファイル内の属性の種類を指定していないし、そして文字列である必要があり、それをデフォルト。私はこのようなエラーが出るけれども:<type>java.lang.Integer</type>とsetterメソッドに:

Unable to find setter method for attribute: x 

を私はまたに属性の種類を変更しようとしている

public void setX(int x) { 
    } 

と私は同じエラーを取得します。

setterエラーが発生しないように、tldファイルとハンドラクラスのセッタで属性を定義する方法を教えてください。

+0

getterの戻り値の型をStringに変更するとどうなりますか? –

+0

同じエラー:xのセッターはありません。 –

+0

すべての型が一致しますか(getter return、setter param、TLDで入力)? –

答えて

4

JSPカスタムタグは、JavaBeansテクノロジを使用しています。これは標準的な規則(ここでは、主な側面をキャプチャするa small JavaBeans tutorialです)があります。

「Beanプロパティ」(PropertyDescriptor参照)getter及び/又は同じタイプのsetter方法から成る(ゲッターの戻り型がセッターの単一PARAM型と一致しなければならない)、そうでなければそれらがマップされていません同じbeanプロパティ(クラスの最初のメソッド "wins"を推測しています)。したがって、String setterはIntegerプロパティに属するものとして検出されないため、Integer getter/String setterアプローチは機能しません。

セッターメソッドのパラメータタイプをIntegerに設定すると、変換が自動的に適用され、変換は自動的に適用されます。PropertyEditorインターフェイスによる値変換の組み込みサポートが組み込まれています(少なくともすべてのプリミティブ型、自動アンボクシングにより、Integerはプリミティブと見なすことができます)。

+0

私はこれを試してみます。これはカラーの型java.awt.Colorでも使えますか? –

+0

@ AlinaDanila PropertyEditorがColor用に存在するかどうかはわかりませんが、確認できます。それ以外の場合は、StringまたはIntegerのgetterおよびsetterを使用し、内部で変換を行います。 –

+0

私は['ColorEditor'](http://www.docjar.com/html/api/sun/beans/editors/ColorEditor.java.html)を見つけましたが、残念ながらそれはSwingと緊密に統合されています –

関連する問題