Там какое-либо серьезное основание состоит в том, чтобы не разрешить scriptlet или выражению 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}" />
Я бы сказал, что это в основном мера обратной совместимости, как и возможность полностью отключить EL для данного JSP.
Возможно, библиотека тегов существовала до EL и использует специальный синтаксис $ {} для своих целей. Возможно, значение атрибута часто принимает значения, содержащие буквальный символ $ {}.
Без такой настройки существующий код (в библиотеке тегов или JSP) необходимо будет изменить, чтобы он продолжал работать после обновления до последней версии спецификации сервлетов.
Потенциально могут быть атрибуты (например, id
для ссылки на сам тег), которые нельзя устанавливать во время выполнения. . Вероятно, вы могли бы придумать сценарий, в котором вы действительно хотите, чтобы $ {}
означало простой текст, или где любой EL-контент оценивался вручную в каком-то настраиваемом контексте.
Но я думаю, что настоящая причина перехода - обратная совместимость. Пользовательские теги появились раньше встроенной поддержки EL в JSP; изменение определения под taglib так, чтобы $ {}
теперь имел особое значение, вероятно, нарушит использование этого тега существующими шаблонами. Безопаснее использовать по умолчанию rtexprvalue-false для обратной совместимости и позволить новым библиотекам тегов для JSP 2.0 указывать, что им нужно новое поведение.
[да. что сказал Тило. : -)]