Оцените переменную перед передачей в JSP Tag Handler - PullRequest
3 голосов
/ 25 апреля 2009

При попытке использовать пользовательскую библиотеку тегов 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 не одобряется, но я работаю с некоторым унаследованным кодом здесь, так что я пока застрял с ним.

Edit:

Я также пробовал:

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

, который тоже не работает - он просто выводит something_${index}.

Ответы [ 3 ]

6 голосов
/ 25 апреля 2009

Я не верю, что вы можете использовать <%= ... %> в атрибуте пользовательского тега, если только ваш <%= ... %> не является полным содержимым значения атрибута. У вас работает следующее?

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

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

РЕДАКТИРОВАТЬ: Я считаю, что <% ... %> в атрибуте пользовательского тега может содержать только имя переменной. не любое выражение Java.

2 голосов
/ 06 июля 2010

Чтобы сохранить ваш код 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 >
0 голосов
/ 25 апреля 2009

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

...