2013-04-30 12 views
20

Mam fasolę, ${product}. Chciałbym zobaczyć wszystkie dostępne pola/właściwości tego komponentu. Na przykład: ${product.price}, ${product.name}, ${product.attributes.colour} itd.Wyświetl wszystkie pola/właściwości fasoli w JSP/JSTL

Czy możliwe jest dynamiczne drukowanie wszystkich nazw i wartości tych właściwości w JSP przy użyciu JSTL/EL?

Coś jak:

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

Odpowiedz

29

Wymień obiekt z fasoli do ustalać.

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

Wyświetl wszystkie zadeklarowane pola i ich wartości.

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

Wyświetl wszystkie zadeklarowane metody.

<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

Nie ma nic o nazwie JSTL obiektu. JSTL zapewnia tylko sposób dostępu do obiektów java w JSP w bardziej przejrzysty i czytelny sposób (innym sposobem jest scriplet). Wystarczy wdrożyć toString (tu jest link stwierdzając krótko o metodzie toString http://www.javatpoint.com/understanding-toString()-method) metody w obiekcie java w tym przypadku produktu i teraz

1) Jeśli pytanie brzmi, jak drukować właściwości obiektów w Javie

System.out.println(product) 

2) Aby wydrukować go w JSP

${product} 

Oto metoda toString Twoim przypadku

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

To, co chcesz zrobić, to w zasadzie pozbawiony sensu, ponieważ jest to ty,, który musi wiedzieć, przedtem, czym jest obiekt i jakie są jego pola. Jeśli z jakiegoś powodu nadal chcesz kontynuować, można mieć metodę, która zwraca co chcesz:

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

Dzięki tej metodzie Twoja mapa będzie dostępna z

${bean.properties} 
3

Gotowy do użycia wersję @ Toby'ego odpowiedź

<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> 
Powiązane problemy