2010-08-04 4 views
7

J'essaie d'écrire une balise JSPX personnalisée qui lit la valeur d'une propriété bean donnée de chaque objet dans une liste donnée, avec le nom de cette balise propriété transmise à la balise en tant qu'attribut JSP. La balise ressemblerait à quelque chose comme ceci:Comment obtenir la valeur de la propriété bean lorsque le nom de la propriété elle-même est une variable dynamique

<jsp:root xmlns:c="http://java.sun.com/jsp/jstl/core" 
     xmlns:jsp="http://java.sun.com/JSP/Page" 
     version="2.0"> 
    <jsp:output omit-xml-declaration="yes"/> 

    <jsp:directive.attribute name="items" type="java.lang.Iterable" 
     required="true" description="The items whose properties are to be read" 
     rtexprvalue="true"/> 
    <jsp:directive.attribute name="propertyName" type="java.lang.String" 
     required="true" description="The name of the bean property to read" 
     rtexprvalue="true"/> 

    <c:forEach items="${items}" var="item"> 
     <!-- This is the bit that doesn't work --> 
     <jsp:getProperty name="item" property="${propertyName}" /> 
    </c:forEach> 

</jsp:root> 

Le problème est que l'attribut property de la balise jsp:getProperty ne semble pas accepter une expression, seule une valeur littérale. Donc, cela fonctionne, mais ne sert à rien pour moi (que je ne connais pas le nom de la propriété jusqu'à l'exécution):

<jsp:getProperty name="item" property="firstName" /> 

L'erreur que je reçois est:

org.apache.jasper.JasperException: org.apache.jasper.JasperException: 
PWC6054: Cannot find any information on property '${propertyName}' in 
a bean of type 'com.example.FooBar' 

Merci pour toute aide.

Répondre

14

Si vous souhaitez utiliser des noms de propriétés dynamiques, utilisez la notation de l'accolade.

<c:forEach items="${items}" var="item"> 
    ${item[propertyName]} 
</c:forEach> 
+0

Légende! Merci un million. –

+0

Existe-t-il un guide de référence pour toutes ces notations? –

+1

De rien. Oui, consultez le chapitre Unified EL dans le didacticiel Java EE. Plus précisément, cette partie est décrite au chapitre [Référence aux propriétés d'objet en utilisant des expressions de valeur] (http://download.oracle.com/javaee/5/tutorial/doc/bnahq.html#bnahx). – BalusC

Questions connexes