struts2 doubleselect标签问题

williamxiao 2011-04-17 05:53:41
在使用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值呢?
...全文
106 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
stevenzxl 2011-06-09
  • 打赏
  • 举报
回复
你以为top就是指代list的值,所以用了typesMap.get(top),但是其实top它是一个Category实例。
你用top.id试一下,应该就好用了~
mingdaoit 2011-06-09
  • 打赏
  • 举报
回复
问题已经解决,大伙来接分吧!
williamxiao 2011-05-20
  • 打赏
  • 举报
回复
最后没有办法的情况下是这么实现的:

<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使用中文好象不怎么合理一样.
williamxiao 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 redlotus_lyn 的回复:]

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

因为一级列表没有JavaBean的实体,是直接使用#{}的方式直接产生Map对象.
williamxiao 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 redlotus_lyn 的回复:]

尝试一下
doubleList="typesMap.get(top.key)"
[/Quote]

尝试过typesMap.get(top.key)不行.
redlotus_lyn 2011-04-17
  • 打赏
  • 举报
回复
应该是实现不了。一级就用List<JavaBean>类型吧。
redlotus_lyn 2011-04-17
  • 打赏
  • 举报
回复
尝试一下
doubleList="typesMap.get(top.key)"

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧