Java 使用jstl访问类属性

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方法的名称(

在我的spring项目中,我的视图从控制器接收一个映射对象,如下所示:

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>