30

我有一颗豆子,${product}。我想查看这个 bean 的所有可用字段/属性。因此,例如,${product.price}${product.name}${product.attributes.colour}

是否可以使用 JSTL/EL 在 JSP 中动态打印出这些属性的所有名称和值?

就像是:

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

4 回答 4

44

用 bean 替换 object 来确定。

<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 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>&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>
于 2014-07-04T14:41:37.553 回答
2

Ready to use version of @Toby's answer

<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>
于 2015-11-20T11:50:03.580 回答
-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;
}
于 2013-04-30T14:43:40.343 回答
-6

你想做的事情基本上是没有意义的,因为必须事先知道对象是什么以及它的领域是什么。如果由于某种原因您仍想继续,您可以使用一个返回所需内容的方法:

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

使用这种方法,您的地图将可以通过

${bean.properties}
于 2013-04-30T15:58:25.263 回答