Есть ли веская причина использовать <rtexprvalue>false </rtexprvalue> в тегах JSP? - PullRequest
12 голосов
/ 29 марта 2010

Есть ли веская причина запретить вставку сценария или выражения EL в качестве значения атрибута?

Допустим, у нас есть тег:

<tag>
    <name>mytag</name>
    <tag-class>org.apache.beehive.netui.tags.tree.Tree</tag-class>
    <attribute>
        <name>attr</name>
        <required>false</required>
        <rtexprvalue>false</rtexprvalue>
        <type>boolean</type>
    </attribute>
</tag>

Что может быть хорошим основанием для отказа от нижеследующего?

<my:mytag attr="${setting}" />

Ответы [ 2 ]

14 голосов
/ 29 марта 2010

Я бы сказал, что это в основном мера обратной совместимости, как и возможность полного отключения EL для заданной JSP.

Возможно, библиотека тегов существовала до EL и использует специальный синтаксис $ {} для своих собственных целей. Возможно, значение атрибута часто принимает значения, содержащие литерал $ {}.

Без такой настройки необходимо изменить существующий код (в библиотеке тегов или JSP), чтобы он продолжал работать после обновления до последней версии спецификации Servlet.

3 голосов
/ 29 марта 2010

Возможно, есть атрибуты (например, id для ссылки на сам тег), которые не подходят для установки во время выполнения. Возможно, вы могли бы придумать сценарий, в котором вы действительно хотели бы, чтобы ${} означал обычный текст, или когда любой контент EL оценивался вручную в каком-то пользовательском контексте.

Но я думаю, что настоящая причина переключения - обратная совместимость. Пользовательские теги предшествуют встроенной поддержке JSP для EL; изменение определения под тегом taglib таким образом, что ${} теперь имеет особое значение, может нарушить использование этого тега в существующих шаблонах. Безопаснее по умолчанию использовать rtexprvalue-false для back-compat и позволить новым меткам тегов для JSP 2.0 указать, что они хотят нового поведения.

[да. что сказал Тило. : -)]

...