2010-03-29 7 views
12

C'è qualche buona ragione per impedire che lo scriptlet o l'espressione EL vengano inseriti come valore di attributo?C'è qualche buona ragione per usare <rtexprvalue> false</ rtexprvalue> nei tag JSP?

Diciamo che abbiamo tag:

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

quello che potrebbe essere un buon motivo per dissallowing il seguito?

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

risposta

14

direi che è per lo più una misura di retro-compatibilità, proprio come la possibilità di disattivare completamente EL per un dato JSP.

Forse la libreria di tag esisteva prima di EL e utilizza la sintassi speciale $ {} per i propri scopi. Forse il valore dell'attributo assume spesso valori che includono un letterale $ {}.

Senza tale impostazione, il codice esistente (nella libreria di tag o JSP) dovrebbe essere modificato per funzionare ancora dopo l'aggiornamento alla versione più recente delle specifiche Servlet.

+0

Risposta perfetta :). Grazie –

3

Potrebbero esserci degli attributi (ad esempio id per fare riferimento al tag stesso) che non è adatto per l'impostazione in fase di esecuzione. Probabilmente potresti inventare uno scenario in cui vuoi veramente che ${} significhi semplicemente testo, o dove qualsiasi contenuto EL sia stato valutato manualmente in qualche tipo di contesto personalizzato.

Ma penso che la vera ragione dello switch sia la retrocompatibilità. I tag personalizzati precedono il supporto integrato di JSP per EL; cambiare la definizione sotto un taglib in modo che ${} abbia ora un significato speciale è probabile che interrompa l'uso di quel tag da parte dei modelli esistenti. Più sicuro di default a rtexprvalue-false per back-compat e lascia che nuovi tagli per JSP 2.0 specificino che vogliono il nuovo comportamento.

[sì. cosa disse Thilo. :-)]