我不是JSTL和表达语言的专家,所以我的问题可能很愚蠢...
我正在使用Spring MVC,在我的控制器中,我有:
@ModelAttribute("export_types")
public ExportType[] getExportTypes() {
return edService.getTypes();
}
ExportType
是一个自定义接口:public interface ExportType {
String getName();
//...
}
在我的页面中,我有:
<c:forEach var="item" items="${export_types}">
<tr>
<td><input type="checkbox" value="${item.name}"></td>
<td>${item.name}</td>
</tr>
</c:forEach>
但是当我运行我的Web应用程序时,我得到了这样的期望:
javax.el.PropertyNotFoundException: Property 'name' not found on type java.lang.String
奇怪的是,该异常显示为
on type java.lang.String
而不是ExportType
类型。所以我的问题是:我不能在接口中使用表达语言吗? 注意1
edService.getTypes()
返回带有接口的具体实现的ExportType[]
数组。为了清楚起见,我有一个实现
ExportType
接口的抽象类。具体类型继承自此:public abstract class AbstractExportType implements ExportType {
protected String name;
protected AbstractExportType() {
this.name = this.getClass().getSimpleName();
}
@Override
String getName(){
return this.name;
}
//...
}
注2
转发到export.jsp的控制器方法非常简单:
@RequestMapping(value = "/export", method = RequestMethod.GET)
public String getExportForm() {
return "jsp/export";
}
最佳答案
我认为这与接口无关。正如@doublep所说,export_types
实际上不是ExportType[]
。我已经尝试过重现您的工作,并且效果很好。