2010-03-29 3 views
12

Gibt es einen guten Grund scriptlet oder EL-Ausdruck zu verbieten als Attributwert eingefügt werden?Gibt es einen guten Grund, <rtexprvalue> false</ rtexprvalue> in JSP-Tags zu verwenden?

Lassen Sie uns sagen, dass wir Tag haben:

<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> 

Was ein guter Grund für dissallowing die unten sein könnte?

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

Antwort

14

würde ich sagen, es ist meist ein Maß der Abwärtskompatibilität ist, ebenso wie die Fähigkeit EL auszuschalten JSP vollständig für eine bestimmte.

Möglicherweise existierte die Tag-Bibliothek vor EL und verwendet die spezielle Syntax $ {} für ihre eigenen Zwecke. Vielleicht nimmt der Attributwert häufig Werte an, die ein Literal $ {} enthalten.

Ohne eine solche Einstellung müsste der vorhandene Code (in der Tag-Bibliothek oder der JSP) geändert werden, um auch nach dem Upgrade auf die neueste Version der Servlet-Spezifikation zu funktionieren.

+0

Perfekte Antwort :). Vielen Dank –

3

Möglicherweise gibt es Attribute (z. B. id, um auf das Tag selbst zu verweisen), dass es zur Laufzeit nicht geeignet ist. Sie könnten wahrscheinlich mit einem Szenario kommen, wo man wirklich ${} Klartext oder in denen die EL-Gehalt ausgewertet wurde manuell in einer Art von benutzerdefiniertem Kontext bedeuten wollte.

Aber ich denke, der wahre Grund für den Schalter ist Rückwärtskompatibilität. Benutzerdefinierte Tags sind älter als JSPs integrierte Unterstützung für die EL; die Definition unter einem taglib zu ändern, so dass ${} nun eine besondere Bedeutung hat, ist wahrscheinlich vorhandenen Vorlagen dieser Tag Gebrauch zu brechen. Sicherer als rtexprvalue-false für back-compat und neue taglibs für JSP 2.0 geben an, dass sie das neue Verhalten wollen.

[ja. was Thilo gesagt hat. :-)]