JSP 2 и Servlet 2.4 сломали мои пользовательские теги

Недавно мы перешли на Servlet 2.4 и JSP 2 в проекте, и наши пользовательские теги больше не работают. У нас есть такие теги, как:

<myTags:someTag value="${x}" />

и однажды в теге мы оценили x bean и пошли оттуда. Теперь оценка происходит непосредственно в JSP, и мы получаем строку (очевидно, x.toString()), установленную для атрибута значения.

Тегов не так много, и я мог бы адаптировать их за несколько дней, но как я могу это сделать? В сети ничего не нашел (а может не там ищу).

Как передать x bean-компонент в мой тег и оценить его там и не разрешить его оценку в JSP?

P.S. Я не хочу деактивировать ЭЛ-двигатель

Спасибо!


person user0912    schedule 20.09.2010    source источник


Ответы (1)


Если вы повторно объявите web.xml как Servlet 2.4 следующим образом

<web-app 
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

и файл tld как taglib JSP 2.0 следующим образом:

<taglib 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 
    version="2.0"> 

Затем вы можете добавить <rtexprvalue>true</rtexprvalue> записей к атрибутам тегов в файле TLD, которые ожидают значений EL. Например.

<attribute>
    <name>value</name>
    <rtexprvalue>true</rtexprvalue>
</attribute>

А именно по умолчанию false.

person BalusC    schedule 20.09.2010
comment
Спасибо за ответ. Я уже настроил их, как вы говорите, и вещь оценивается как String до достижения моего тега. - person user0912; 20.09.2010
comment
да. У меня есть Servlet 2.4 в web.xml, web-jsptaglibrary_2_0.xsd для файла TLD. Я получаю строку в значении, даже если компонент x является чем-то другим. Что это может быть? Как вы, наверное, догадались из моего другого вопроса, я не очень хорош в этом, но в основном это должно работать. Что еще я могу делать неправильно? - person user0912; 21.09.2010
comment
Мои теоретические знания JSP taglib немного устарели. Я не применял это широко на практике. В качестве следующего шага попробуйте добавить <type>java.lang.Object</type> к <attribute>. - person BalusC; 21.09.2010
comment
Мне удалось заставить вещь работать. Ваш последний комментарий ударил меня прямо в голову, и я понял, что я делаю неправильно. Даже если бы все настройки были сделаны правильно, я забыл, что атрибуты обработчика тегов были установлены на String. Я всегда ожидал String как выражение EL, которое я оценивал один раз в обработчике. Я был настолько сосредоточен на поиске способа заставить ту же самую старую строку прибыть в мой класс для ее оценки, что мне не пришло в голову изменить тип атрибута и просто получить объект, уже оцененный из JSP2. Спасибо и извините за мою (иначе не назовешь) глупость. - person user0912; 21.09.2010
comment
Нет проблем, добро пожаловать! :) Хорошо, что вы разместили здесь актуальное решение. - person BalusC; 22.09.2010