2010-08-04 6 views
7

Ich versuche ein benutzerdefiniertes JSPX-Tag zu schreiben, das den Wert einer gegebenen Bean-Eigenschaft von jedem Objekt in einer gegebenen Liste mit dem Namen liest Eigenschaft, die an das Tag als JSP-Attribut übergeben wird. Der Tag würde wie folgt aussehen:So erhalten Sie den Wert der Bean-Eigenschaft, wenn der Eigenschaftsname selbst eine dynamische Variable ist

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

Das Problem ist, dass das property Attribut des jsp:getProperty Tages scheint nicht einen Ausdruck, nur einen wörtlichen Wert zu übernehmen. So würde das funktionieren, aber es ist nichts für mich (wie ich weiß nicht, den Namen der Eigenschaft erst zur Laufzeit):

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

Der Fehler, den ich bekommen ist:

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

Vielen Dank für jede Hilfe.

Antwort

14

Wenn Sie dynamische Eigenschaftsnamen verwenden möchten, verwenden Sie die geschweifte Klammer.

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

Legende! Tausend Dank. –

+0

Gibt es einen Referenzleitfaden für alle diese Notationen? –

+1

Gern geschehen. Ja, überprüfen Sie das Kapitel Unified EL in Java EE. Insbesondere wird dieser Teil im Kapitel [Bezug auf Objekteigenschaften mit Wertausdrücken] (http://download.oracle.com/javaee/5/tutorial/doc/bnahq.html#bnahx) beschrieben. – BalusC