2010-08-04 7 views
7

Sto provando a scrivere un tag JSPX personalizzato che legge il valore di una determinata proprietà bean da ciascun oggetto in un determinato elenco, con il nome di quello proprietà passata al tag come attributo JSP. Il tag sarebbe simile a questa:Come ottenere il valore della proprietà bean quando il nome proprietà stesso è una variabile dinamica

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

Il problema è che l'attributo property del tag jsp:getProperty non sembra accettare l'espressione, solo un valore letterale. Quindi questo avrebbe funzionato, ma non serve a me (come io non conosco il nome della proprietà fino al runtime):

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

L'errore che ottengo è:

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

Grazie per qualsiasi aiuto.

risposta

14

Se si desidera utilizzare nomi di proprietà dinamici, utilizzare la notazione delle controventi.

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

Legenda! Grazie mille. –

+0

Esiste una guida di riferimento per tutte queste notazioni? –

+1

Prego. Sì, controlla il capitolo Unified EL in Java EE tutorial. In particolare questa parte è descritta nel capitolo [Riferendosi alle proprietà dell'oggetto usando espressioni di valore] (http://download.oracle.com/javaee/5/tutorial/doc/bnahq.html#bnahx). – BalusC