2012-02-14 26 views
1

カスタムタグを定義して1つのパラメータ(数値)を取得し、それを使って情報を検索して返します。私はNumberFormatExceptionを取得し続けます。私はELを使ってjspのタグに番号を渡しています。私のTLDでNumberFormatExceptionを与えるカスタムタグへの値の受け渡し

private int id; 
//getters and setters for id 
public int doStartTag() throws JSPException { 
//Does some stuff with id 
} 

(いくつかのものを省略):

<attribute> 
    <name>id</name> 
    <required>true</required> 
    <rtexprvalue>true</rtexprvalue> 
</attribute> 

私のカスタムタグハンドラで

private int id; 
private void setId(int id){ 
this.id = id; 
} 
private int getId(){ 
return id; 
} 

:アクションのためのBeanクラスで

<my:myTag id="${action.id}"/> 

タグは、私が麻痺を渡すだけで、私が望むことをします。 er in(つまり、id = "6")が、EL式の値を使用しようとすると常に例外がスローされます。式が評価されるときなど、どこかでint-string変換が起こっていますか?それは豆のintフィールドで、私はそれがそのまま渡されると仮定しましたか?私は、タグハンドラの属性をStringとIntegerに変更しようとしましたが、どちらも解決していません。私はrtexprvalueをtrueに設定したので、それを正しく評価する必要があります。どんな助けもありがたい。

+0

正確にはnullポインタ例外が発生していますか? –

+2

どのJSPエンジン、どのバージョンですか?古いバージョンのJSP仕様には、JSPコンパイラ段階でのELの解析/評価は含まれていませんでした。式をタグで手動で評価する必要がありました。 – Tim

+0

@Timありがとう。これは正しい方向で私に指摘し、実際には、タグハンドラで式を手動で評価する必要がありました。これを答えにしたいなら、私はそれを受け入れます。 – Paul

答えて

2

OK、これは... JSP 1.xので

上記の私のコメントの長いバージョンで、JSPエンジンは、表現言語について何も知りませんでした。 ELはJSTLの一部として定義されていましたが、タグ自体に組み込まれていたため、エンジンは評価に関与しませんでした。

JSP 2.0では、ELがJSP仕様に移行され、エンジンがそれをサポートしました。 JSP 2.1では、ELがJSF ELとマージされました。

したがって、JSP 1.xを使用している場合は、自分でELを実行する必要があります。

しかし、物事をもっと複雑にするために、JSP 2.0では、顧客タグハンドラのAPIが簡素化されました。 JSP 1.xでは、タグはTagで実装されましたが、JSP 2.0タグではSimpleTagが実装されています。

JSP 2.xエンジンはJSP 1.xスタイルのタグ(Tagを実装するクラス)をサポートしますが、JSP 1.xがそれらを処理したのと同じ方法で扱います - ELはエンジンによって評価されず、タグを明示的に評価する必要があります。

rtexprvalueは、EL式がサポートされているかどうか(ELの前にその属性があるかどうか)ではなく、スクリプトレット式がサポートされているかどうかを実際に制御します。

関連する問題