jsp - instalar - tutorial de jstl
Ver todos los campos/propiedades de bean en JSP/JSTL (4)
Tengo un frijol, ${product}
. Me gustaría ver todos los campos / propiedades disponibles de este bean. Por ejemplo, ${product.price}
, ${product.name}
, ${product.attributes.colour}
etc.
¿Es posible imprimir dinámicamente todos los nombres y valores de estas propiedades en JSP, usando JSTL / EL?
Algo como:
<c:forEach items="${product}" var="p">
${p.key} - ${p.value}
</c:forEach>
Lo que quiere hacer es básicamente carente de sentido , ya que es usted quien debe saber de antemano qué es el objeto y cuáles son sus campos. Si por alguna razón aún desea continuar, puede tener un método que devuelva lo que desea:
public Map<String, Object> getProperties() {
//create your map and populate it via plain strings-getters for fields
//or use Java Reflection API
}
Con este método, su mapa será accesible con
${bean.properties}
No hay nada llamado Objeto JSTL. JSTL simplemente proporciona la forma de acceder a los objetos Java en JSP de una manera más limpia y legible (de otra manera es scriplet). Simplemente implemente toString (aquí está el enlace que indica un breve acerca del método toString http://www.javatpoint.com/understanding-toString()-method ) en su objeto java en este caso producto y ahora
1) Si su pregunta es cómo imprimir las propiedades del objeto en java
System.out.println(product)
2) Para imprimirlo en JSP
${product}
Aquí está el método toString para su caso
public String toString(){
return price + name;
}
Reemplace el objeto con el frijol para determinar.
<c:set var="object" value="${product}" />
Mostrar todos los campos declarados y sus valores.
<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>${field.name}</span>${object[field.name]}</li></c:catch>
</c:forEach>
</ul>
</c:if>
Mostrar todos los métodos declarados.
<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>
Versión lista para usar de la respuesta de @ 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>