2009-04-24 6 views
3

カスタムJSPタグライブラリを使用しようとすると、タグライブラリに渡される前に評価されたいJSPで変数が定義されています。しかし、私はそれを動作させるように見えることはできません。ここに私のJSPの簡易版だ:JSPタグハンドラに渡す前に変数を評価する

<% int index = 8; %> 

<foo:myTag myAttribute="something_<%= index %>"/> 

TagHandlerdoStartTag()方法は、入力された属性に基づいて書くことのpageContextの出力ストリームを使用しています。しかし

public int doStartTag() { 
    ... 
    out.println("Foo: " + this.myAttribute); 
} 

、私は最終的に出力を参照しますマークアップは次のとおりです。

Foo: something_<%= index %> 

代わりに私が何をしたいの:

属性の
Foo: something_8 

私のタグライブラリの定義は次のとおりです。私はrtexprvalue両方truefalseで属性を設定しようとしましたが、どちらも働い

<attribute> 
    <name>myAttribute</name> 
    <required>true</required> 
</attribute> 

。属性がハンドラに送信される前に評価されるように属性を構成する方法はありますか?それとも、私はこれについて完全に間違っているのですか?

私はJSPタグが比較的新しいので、この問題を解決するための選択肢があります。また、JSPでスクリプトレットを使用することは歓迎されていますが、ここではいくつかのレガシーコードを使用していますので、今のところそれに固執しています。

編集:私も試してみました

<foo:myTag myAttribute="something_${index}"/> 

どちらか動作しません - それだけでsomething_${index}を出力します。

答えて

6

私はあなたの<%= ... %>は、属性値の全体の内容でない限り、あなたは、カスタムタグの属性内<%= ... %>を使用できることを信じていません。あなたのために次のことは可能ですか?

<% int index = 8; %> 
<% String attribValue = "something_" + index; %> 

<foo:myTag myAttribute="<%= attribValue %>"/> 

編集:私は、カスタムタグの属性内の<% ... %>は、変数名のみを含めることができると信じています。 Java式ではありません。

0

<foo:myTag myAttribute="something_${index}"/>

+0

<foo:myTag myAttribute="<%= attribValue %>"> body </foo:myTag > 

からそれを変更する必要があります、私は」実際にもそれを試してみましたが、私にとってはうまくいきませんでした。質問を更新しますが、答えに感謝します。 –

2

JSPコードをきれいに整えておくために、可能であればスクリプトを避けてください。私は、これはそれを行うための好ましい方法であると思う:

<foo:myTag > 
    <jsp:attribute name="myAttribute"> 
    something_${index} 
    </jsp:attribute> 
</foo:myTag > 

タグが、体が含まれている場合、あなたは

<foo:myTag > 
    <jsp:attribute name="myAttribute"> 
    something_${index} 
    </jsp:attribute> 
    <jsp:body> 
    body 
    </jsp:body> 
</foo:myTag > 
+1

このリマインダーに感謝します。 JSP taglibチュートリアルでこれを見つけたことはありませんでした。 – cringe

関連する問題