我有一个bean ${product}
。我想查看这个bean的所有可用字段/属性。例如,${product.price}
,${product.name}
,${product.attributes.colour}
等等。
是否可以使用JSTL / EL在JSP中动态打印出这些属性的所有名称和值?
类似的东西:
<c:forEach items="${product}" var="p">
${p.key} - ${p.value}
</c:forEach>
答案 0 :(得分:37)
用bean替换对象以确定。
<c:set var="object" value="${product}" />
显示所有声明的字段及其值。
<c:if test="${not empty object['class'].declaredFields}">
<h2>Declared fields <em>${object.name}</em></h2>
<ul>
<c:forEach var="field" items="${object['class'].declaredFields}">
<c:catch><li><span style="font-weight: bold">
${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><% object.getName() %></em></h2>
<ul>
<c:forEach var="method" items="${object['class'].declaredMethods}">
<c:catch><li>${method.name}</li></c:catch>
</c:forEach>
</ul>
</c:if>
答案 1 :(得分:3)
准备使用@ Toby的回答版本
<p class="TODO <your name> PRINT OBJECT PROPERTIES">
<c:set var="object" value="${<your object here>}" />
<h2><b>Object: ${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>: ${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>
答案 2 :(得分:-3)
没有任何东西叫做JSTL对象。 JSTL只是提供了以更清晰,更易读的方式访问JSP中的java对象的方法(其他方式是scriplet)。在这个案例产品的java对象中实现toString(这里是关于toString方法http://www.javatpoint.com/understanding-toString()-method的简要说明)方法,现在
1)如果您的问题是如何在java中打印对象属性
System.out.println(product)
2)在JSP中打印
${product}
这是你案例的toString方法
public String toString(){
return price + name;
}
答案 3 :(得分:-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}