Struts 2如何显示地图复选框

时间:2016-03-31 07:59:02

标签: java jsp scope struts2 hashmap

我有以下代码:

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

任何想法如何解决这个问题?我已将代码转换为通用代码。谢谢!

1 个答案:

答案 0 :(得分:3)

idname是您在服务器端填充地图时使用的变量的名称...

它们与您在JSP中阅读的地图属性无关,即keyvalue

<s:checkboxlist list = "map" 
             listKey = "%{key}" 
           listValue = "%{value}" 
                name = "value" 
               value = "name" 
               label = "Label"/>