在我的spring项目中,我的视图从控制器接收一个这样的Map对象:
Map<String, List<?>>
我以这种方式访问我的jsp代码:
<c:forEach var="field" items="${values[item]}">
<c:out value="${field}"/> <br/>
</c:forEach>
考虑到?
指示的类是常规POJO类,我如何在jsp中访问此类的属性?换句话说,我应该用什么正确的指令代替:
<c:out value="${field}"/> <br/>
因为有了这个,当我在浏览器中打开页面时,我会得到类似的内容:
com.spring.loja.model.categoria.persistence.model.Categoria@41c0e228
更新
我尝试使用此主题,按照本主题中的回答:
<c:out value="${field.name}"/>
但我想知道是否有办法使用这种方法:
@Override
protected String getArgument(int ordem) {
switch(ordem) {
case 0: return "Id";
case 1: return "Login";
case 2: return "Senha";
case 3: return "Nome";
case 4: return "Sobrenome";
case 5: return "E-Mail";
case 6: return "Autorizacao";
default: return null;
}
}
这种方式可以避免使用getter方法的名称(它是一个通用的jsp页面,由多个视图使用,我不知道将使用哪种方法)
答案 0 :(得分:3)
如果此POJO有一个示例getName()
getter,那么您可以使用以下方式访问name
字段:
<c:out value="${field.name}"/>
如果您使用Servlet +3.0
版本,则可以从EL调用方法。然后你可以尝试这样的事情:
<c:out value="${field[field.getArgument(2)]}"/>
答案 1 :(得分:1)
答案 2 :(得分:1)
您可以尝试:
<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>
Java相当于:
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));
}
}
只要MyObj具有简单的数据类型作为字段,这将显示正常。如果它有一个List myList,它将显示为:myList [str1,str2]。
答案 3 :(得分:0)
我最终如何解决这个问题:
我在服务类中添加了这两个方法:
public Map<String, List<String>> getListaAtributos() {
...
}
public Map<String, List<?>> getListaValores() {
...
}
这两个方法的关键是它来自我的类的属性,并且与它们相关联的值是:null,如果atribute具有基本类型,或者第一个类的属性列表,以及存储在该实体的数据库中的值列表。
我将此地图传递给我的观点并使用这种方式:
<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>