2010-10-10 28 views
1

Je suis un peu confus si celui qui est évalué en premier. jstl ou mon taglib personnalisé.qui est évalué d'abord mon taglib ou jstl?

Voici quelques extraits.

<taglib> 
    ... 
    <tag> 
    <name>my_tag</name> 
    <tagclass>MyTagLib</tagclass> 
    <bodycontent>JSP</bodycontent> 
    <attribute> 
     <name>attr1</name> 
     <required>true</required> 
     <rtexprvalue>true</rtexprvalue> 
    </attribute> 
</taglib> 

tried to use it in jsp by: 
... 
pageContext.setAttribute("val", "actualValue"); 
... 
<t:my_tag attr1="${val}"/> 

public MyTagLib extends TagSupport{ 
    private String attr1; 
    public void setAttr1(String str){ 
     attr1 = str; // this returns "${val}". i was expecting "actualValue". 
    } 
    ... 
} 

Je me demande comment accéder à la valeur réelle de val?

+2

vous avez probablement besoin d'activer le support EL sur votre jsp. Quelle version du serveur jsp utilisez-vous? et quel serveur d'application? – Yoni

Répondre

0

L'évaluation de l'expression d'exécution est ce qui vous permet d'évaluer les expressions Java à l'intérieur de <%= ...%> pour vos paramètres de tag personnalisés. Si vous utilisez le langage d'expression JSTL (EL), vous n'utilisez pas la balise d'expression Java. Ils constituent deux manières distinctes de faire référence au contenu dynamique pour les attributs de balise personnalisés. Pour utiliser le JSTL EL, vous devez créer votre balise personnalisée de manière à ce qu'elle contienne le support EL.

Pour le mécanisme d'évaluation EL, consultez la classe org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager dans le Jakarta standard Taglib

1

Voici un article qui traite cette question de manière cohérente:

http://www.informit.com/articles/article.aspx?p=30946&seqNum=9

En résumé, les attributs d'un tag personnalisé ne sont pas traitées par l'évaluateur EL par défaut. Si vous voulez que cela soit fait, vous devez coder la classe du gestionnaire de balises pour le faire.

Si vous ne voulez pas vous préoccuper de cela, vous pouvez utiliser les expressions <%= ... %> à la place.