2013-04-30 30 views
20

我有一個bean,${product}。我想查看這個bean的所有可用字段/屬性。因此,例如,${product.price},${product.name},${product.attributes.colour}在JSP/JSTL中查看bean的所有字段/屬性

是否有可能使用JSTL/EL動態打印出JSP中這些屬性的所有名稱和值?

喜歡的東西:

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

回答

29

訪問與bean來代替對象確定。

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

顯示所有聲明的字段及其值。

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

顯示所有聲明的方法。

<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獻給DAS – 2016-05-08 06:55:36

-3

沒有什麼所謂的JSTL對象。 JSTL只是提供了以更清晰和更可讀的方式訪問JSP中的Java對象的方式(其他方式是腳本化)。剛剛實施的toString(這裏是鏈接,說明短暫的約toString方法http://www.javatpoint.com/understanding-toString()-method)在這種情況下,產品在你的java對象的方法,現在

1)如果你的問題是如何在Java

System.out.println(product) 

打印對象屬性2)在JSP打印

${product} 

這裏是toString方法對你的情況

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

你想要做的事情基本上是沒有意義,因爲它是誰必須知道事先什麼對象是什麼,它的領域是什麼。如果由於某種原因,你還是要繼續,你可以有一個方法,返回你想要什麼:

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

有了這種方法,您的地圖將與

${bean.properties} 
3

即買即用的版本@託比的回答

<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> 
相關問題