2010-08-04 18 views
7

Estoy tratando de escribir una etiqueta JSPX personalizada que lea el valor de una propiedad dada de cada objeto en una lista dada, con el nombre de esa propiedad pasó a la etiqueta como un atributo JSP. La etiqueta sería algo como esto:Cómo obtener el valor de la propiedad Bean cuando el nombre de la propiedad es una variable dinámica

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

El problema es que no parece el atributo de la etiqueta propertyjsp:getProperty a aceptar una expresión, más que un valor literal. Así que esto funcionaría, pero no sirve de nada para mí (ya que no conozco el nombre de la propiedad hasta que el tiempo de ejecución):

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

El error que consigo es:

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

Gracias por cualquier ayuda.

Respuesta

14

Si desea utilizar nombres de propiedades dinámicos, use la notación de corchetes.

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

¡Leyenda! Un millón de gracias. –

+0

¿Hay una guía de referencia para todas esas anotaciones? –

+1

De nada. Sí, consulte el capítulo Unified EL en el tutorial de Java EE. Específicamente, esta parte se describe en el capítulo [Referencias a las propiedades de los objetos usando expresiones de valores] (http://download.oracle.com/javaee/5/tutorial/doc/bnahq.html#bnahx). – BalusC

Cuestiones relacionadas