2013-04-30 10 views
20

Ho un bean, ${product}. Vorrei vedere tutti i campi/proprietà disponibili di questo bean. Così, per esempio, ${product.price}, ${product.name}, ${product.attributes.colour} eccVisualizza tutti i campi/le proprietà di bean in JSP/JSTL

E 'possibile stampare in modo dinamico tutti i nomi ei valori di queste proprietà in JSP, usando JSTL/EL?

Qualcosa di simile:

<c:forEach items="${product}" var="p"> 
    ${p.key} - ${p.value} 
</c:forEach> 

risposta

29

Sostituire oggetto con il fagiolo di determinare.

<c:set var="object" value="${product}" /> 

Mostra tutti i campi dichiarati ed i loro valori.

<c:if test="${not empty object['class'].declaredFields}"> 
    <h2>Declared fields <em>&dollar;{object.name}</em></h2> 
    <ul> 
     <c:forEach var="field" items="${object['class'].declaredFields}"> 
      <c:catch><li><span>${field.name}</span>${object[field.name]}</li></c:catch> 
     </c:forEach> 
    </ul> 
</c:if> 

Visualizzare tutti i metodi dichiarati.

<c:if test="${not empty object['class'].declaredMethods}"> 
    <h2>Declared methods<em>&lt;% object.getName() %&gt;</em></h2> 
    <ul> 
     <c:forEach var="method" items="${object['class'].declaredMethods}"> 
      <c:catch><li>${method.name}</li></c:catch> 
     </c:forEach> 
    </ul> 
</c:if> 
+0

Dankeschön für das –

-3

Non c'è nulla chiamato JSTL oggetto. JSTL fornisce solo il modo di accedere agli oggetti java in JSP in modo più pulito e più leggibile (in altri termini lo scriplet). Basta implementare toString (ecco il link affermando breve sul metodo toString http://www.javatpoint.com/understanding-toString()-method) metodo nella oggetto Java in questo caso del prodotto e ora

1) Se la tua domanda è come stampare le proprietà degli oggetti in Java

System.out.println(product) 

2) per stamparlo in JSP

${product} 

Ecco il metodo toString per il vostro caso

public String toString(){ 
return price + name; 
} 
-5

Che cosa si vuole fare è fondamentalmente privo di senso, in quanto è si che deve sapere in anticipo ciò che l'oggetto è e quali sono i suoi campi. Se per qualche ragione si vuole ancora di procedere, si può avere un metodo che restituisce ciò che si vuole:

public Map<String, Object> getProperties() { 
    //create your map and populate it via plain strings-getters for fields 
    //or use Java Reflection API 
} 

Con questo metodo la vostra mappa sarà accessibile con

${bean.properties} 
3

Pronto all'uso versione di @ risposta di Toby

<p class="TODO <your name> PRINT OBJECT PROPERTIES"> 
    <c:set var="object" value="${<your object here>}" /> 
    <h2><b>Object:&nbsp; ${object.class} </b></h2> 
    <h3><b>Declared fields</b></h3> 
    <c:if test="${!empty object.class.declaredFields}"> 
     <ul> 
      <c:forEach var="attr" items="${object.class.declaredFields}"> 
       <c:catch><li><b>${attr.name}</b>:&nbsp; ${object[attr.name]}</li></c:catch> 
      </c:forEach> 
     </ul> 
    </c:if> 
    <c:if test="${empty object.class.declaredFields}">No declared fields</c:if> 
    <h3><b>Declared methods</b></h3> 
    <c:if test="${!empty object.class.declaredMethods}"> 
     <ul> 
      <c:forEach var="attr" items="${object.class.declaredMethods}"> 
       <c:catch><li><b>${attr.name}</b>(...)</li></c:catch> 
      </c:forEach> 
     </ul> 
    </c:if> 
    <c:if test="${empty object.class.declaredMethods}">No declared methods</c:if> 
</p>