3

カスタムJSPタグライブラリを使用しようとすると、JSPで定義された変数があり、タグライブラリに渡される前に評価されます。しかし、私はそれを機能させることができないようです。これが私のJSPの簡略版です。

<% int index = 8; %>

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

私のdoStartTag()メソッドはTagHandler、pageContextの出力ストリームを使用して、入力された属性に基づいて書き込みます。

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

ただし、最終的なマークアップに表示される出力は次のとおりです。

Foo: something_<%= index %>

私が欲しいものの代わりに:

Foo: something_8

属性のタグライブラリ定義は次のとおりです。

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

rtexprvalueとの両方trueで属性を構成しようとしましfalseたが、どちらも機能しませんでした。ハンドラーに送信される前に評価されるように属性を構成する方法はありますか?それとも私はこれについて完全に間違っていますか?

私はJSPタグに比較的慣れていないので、この問題を解決するための代替案を受け入れています。また、JSPでスクリプトレットを使用することは嫌われていることにも気づきましたが、ここではいくつかのレガシーコードを使用しているため、今のところはそれに固執しています。

編集:

私も試しました:

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

これも機能しません-出力するだけsomething_${index}です。

4

3 に答える 3

6

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

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

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

編集:<% ... %>カスタムタグ属性内には変数名しか含めることができないと思います。Java式ではありません。

于 2009-04-24T20:35:02.573 に答える
2

JSP コードを簡潔に保つために、可能な限りスクリプトを作成しないでください。私はこれがそれを行うための好ましい方法だと思います:

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

タグに本文も含まれている場合は、それを変更する必要があります

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

<foo:myTag >
  <jsp:attribute name="myAttribute">
    something_${index}
  </jsp:attribute>
  <jsp:body>
    body
  </jsp:body>
</foo:myTag >
于 2010-07-06T11:13:12.937 に答える
0

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

于 2009-04-24T20:23:45.893 に答える