Java 使用jstl访问类属性
在我的spring项目中,我的视图从控制器接收一个映射对象,如下所示:Java 使用jstl访问类属性,java,spring,jsp,jstl,Java,Spring,Jsp,Jstl,在我的spring项目中,我的视图从控制器接收一个映射对象,如下所示: Map<String, List<?>> 因为这样,当我在浏览器中打开页面时,会得到类似的结果: com.spring.loja.model.categoria.persistence.model.Categoria@41c0e228 更新 我试着使用这个主题中发布的以下答案: <c:out value="${field.name}"/> 这种方法可以避免使用getter方法的名称(
Map<String, List<?>>
因为这样,当我在浏览器中打开页面时,会得到类似的结果:
com.spring.loja.model.categoria.persistence.model.Categoria@41c0e228
更新
我试着使用这个主题中发布的以下答案:
<c:out value="${field.name}"/>
这种方法可以避免使用getter方法的名称(这是一个通用jsp页面,由多个视图使用,我不知道将使用哪个方法)如果这个POJO有一个示例
getName()
getter,那么您可以使用以下方法访问name
字段:
<c:out value="${field.name}"/>
若您使用Servlet+3.0
版本,那个么您可以从EL调用方法。然后你可以试试这样的东西:
如果您使用的是EL 2.2,那么您可以使用
有关更多详细信息,请参阅SO答案您可以尝试:
<c:forEach var="myObj" items="${values[item]}">
<c:if test="${not empty myObj.class.declaredFields}">
<c:forEach var="field" items="${myObj.class.declaredFields}">
<!--To catch NoSuchFieldException,SecurityException-->
<c:catch>Field Name:${field.name} - Field Value:${myObj[field.name]}</c:catch>
</c:forEach>
</c:if>
</c:forEach>
只要MyObj有简单的数据类型作为字段,就会显示良好。如果它有一个列表myList,它将显示为:myList[str1,str2]。我最终如何解决这个问题: 我在我的服务类中添加了这两个方法:
public Map<String, List<String>> getListaAtributos() {
...
}
public Map<String, List<?>> getListaValores() {
...
}
公共地图getListaAttributeTos(){
...
}
公共映射
正在隐式调用toString()
。您希望看到什么?@geo并查看下面的答案和我的评论,以了解有关我想做什么的更多细节。Java中没有方法排序这样的事情。我建议您让您的所有模型对象实现一个特定的接口,该接口具有一个返回您需要的数据的方法want@geoand是的,我有。请参阅我的更新,其中包括了返回我想要使用的数据的方法。好的,这是可行的,但我想知道是否有一种方法可以不使用getter方法的名称,而是使用方法的“位置”(0=Id,等等)。我的每个类中都有一个方法,它是一个抽象方法的实现,返回给定位置的方法名。这可能吗?
<c:out value="${field.name}"/>
<c:forEach var="myObj" items="${values[item]}">
<c:if test="${not empty myObj.class.declaredFields}">
<c:forEach var="field" items="${myObj.class.declaredFields}">
<!--To catch NoSuchFieldException,SecurityException-->
<c:catch>Field Name:${field.name} - Field Value:${myObj[field.name]}</c:catch>
</c:forEach>
</c:if>
</c:forEach>
if(myObj.getClass().getDeclaredFields() != null){
for(Field field : myObj.getClass().getDeclaredFields()){
System.out.println("Field Name:"+field.getName());
System.out.println("Field value:"+field.get(object));
}
}
public Map<String, List<String>> getListaAtributos() {
...
}
public Map<String, List<?>> getListaValores() {
...
}
<c:forEach var="atributo" items="${map[item]}">
...
<form:label path="${item}.${atributo}" class="form-control">${atributo}</form:label>
<form:input path="${item}.${atributo}" class="form-control"/>
...
</c:forEach>