tutorial instalar formulario ejemplos curso jsp properties jstl javabeans

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

Mostrar todos los métodos declarados.

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


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