我有以下代码:
private Map<Long,String> map = new HashMap<Long, String>();
public Map<Long, String> getMap() {
return map;
}
public void setMap(Map<Long, String> map) {
this.map= map;
}
public String list() {
List<Object> list = new ArrayList<>();
list= objectDAO.listSomething();
for (int i=0; i<list.size(); i++){
Object row = (Object) list.get(i);
Long id = row.getId();
String name = row.getName();
map.put(id, name);
}
return SUCCESS;
}
使用调试器检查后,我可以看到地图中填充了正确的键和值。
我发现问题的jsp在这里:
<s:checkboxlist list = "map"
listKey = "%{id.toString()}"
listValue = "%{name}"
name = "name"
value = "name"
label = "Label"/>
我也试过这样的事,但没有运气:
<s:iterator value="map">
<s:checkbox label="Label" name="name" value="%{value}"/>
<s:property value="%{value}"/>
</s:iterator>
点击动作时的错误是(编辑):
第28行的错误,template / simple / checkboxlist.ftl中的第13列stack.findValue(parameters.listKey)未定义。它不能分配给itemKey - 类:freemarker.core.Assignment文件:Assignment.java方法:接受行:111 - freemarker / core / Assignment.java:111:-1
任何想法如何解决这个问题?我已将代码转换为通用代码。谢谢!
答案 0 :(得分:3)
id
和name
是您在服务器端填充地图时使用的变量的名称...
它们与您在JSP中阅读的地图属性无关,即key
和value
:
<s:checkboxlist list = "map"
listKey = "%{key}"
listValue = "%{value}"
name = "value"
value = "name"
label = "Label"/>