在使用struts2的doubleselect标签时遇到以下问题:一级下拉列表的list想使用#{}的方式直接产生Map的方式,
二级级联的下拉列表使用的Map<Integer,List<types>> map对象方式(typesMap)。问题是在二级下拉列表中top值不知道应该取什么?代码如下:(这种方式二级下拉列表中无值,因为top值不对)<s:form>
<s:doubleselect name="topTypes" list="#{0:'Top选项1',1:'Top选项2'}"  listKey="key" listValue="value"
doubleName="types" doubleList="typesMap.get(top)" doubleListKey="id" doubleListValue="name" theme="simple"/>
</s:form>
以下这种方式,是可以的:<s:form>
<s:doubleselect name="topTypes" list="{0,1}"
doubleName="types" doubleList="typesMap.get(top)" doubleListKey="id" doubleListValue="name" theme="simple"/>
</s:form>
请问,当一级下拉列表是使用的Map时,二级下拉列表中的top如何获得一级Map的key值呢?

解决方案 »

  1.   

    尝试一下
    doubleList="typesMap.get(top.key)"
      

  2.   

    应该是实现不了。一级就用List<JavaBean>类型吧。
      

  3.   


    尝试过typesMap.get(top.key)不行.
      

  4.   


    因为一级列表没有JavaBean的实体,是直接使用#{}的方式直接产生Map对象.
      

  5.   

    最后没有办法的情况下是这么实现的:<s:doubleselect name="kind" list="{'Top选项1','Top选项2'}"
    doubleName="typeId" doubleList="typesMap.get(top)" doubleListKey="id" doubleListValue="name" theme="custom"/>
    也是就让一级select的option直接使用只使用文字(value),而不设置key,像这样:list="{'Top选项1','Top选项2'}";
    然后,二级select的List里面还是使用HashMap对象,不过map中封装成这样:(java代码,使用Struts2)public Map<String, List<Types>> getTypesMap()
    {
    Map<String, List<Types>> typesMap = new HashMap<String, List<Types>>();
    //获得所有类别列表
    List<Types> typesList = typesBuz.getAllTypes();
    //Top选项1
    List<Types> newsList = new ArrayList<Types>();
    //Top选项2
    List<Types> inforList = new ArrayList<Types>();
    for(Types types : typesList)
    {
    //Top选项1
    if(types.getKind()==0)
    {
    newsList.add(types);
    }
    //Top选项2
    else if(types.getKind()==1)
    {
    inforList.add(types);
    }
    }

    //封装到Map中
    typesMap.put("Top选项1", newsList);
    typesMap.put("Top选项2", inforList);

    return typesMap;
    }也就是使map的key为中文,重点在于:typesMap.put("Top选项1", newsList);这样,当一级select选择为"Top选项1"时,二级select会执行typesMap.get(top),即从typesMap中get map中key为top的列表对象(top表示为一级select当前选定对象).只是觉得将map的key使用中文好象不怎么合理一样.
      

  6.   

    你以为top就是指代list的值,所以用了typesMap.get(top),但是其实top它是一个Category实例。
    你用top.id试一下,应该就好用了~