云自无心水自闲
天平山上白云泉,云自无心水自闲。何必奔冲山下去,更添波浪向人间!
posts - 288, comments - 524, trackbacks - 0, articles - 6
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
Struts2中doubleselect的使用方法
Posted on 2008-03-27 22:08
云自无心水自闲
阅读(12141)
评论(16)
编辑
收藏
所属分类:
Java
、
心得体会
、
Struts2
在Struts2的官方网站上,有doubleselect的用法示例,但是那个例子比较简单。
<s:doubleselect label="doubleselect test2" name="menu" list="#{'fruit':'Nice Fruits', 'other':'Other Dishes'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />
上面的例子演示了doubleselect的基本用法,但是其list和doubleList都是固定的。尤其是doublelist的切换使用了3目运算符 ? :,并没有太大的实际使用价值。在实际应用中,list往往是action返回的一个List<DataObject>,listKey和listValue来显示第一级下拉框,doubleList往往是一个Map<Integer, List<DataObject>>,其中Map中的Key值是第一级下拉框的listKey。
举个例子:
Data Object:
public
class
Book
{
private
int
id;
private
String name;
private
int
categoryId;
//
getter and setter
..
}
public
class
Category
{
private
int
id;
private
String name;
//
getter and setter
..
}
JSP:
<s:doubleselect list="categoryList" listKey="id" listValue="name"
doubleName="bookId" doubleList="bookMap.get(top.id)" doubleListKey="id" doubleListValue="name" theme="simple"/>
此处要注意的是top的用法,开始我以为top就是指代list的值,所以使用的是bookMap.get(top),但是二级下拉框一直是空白,后来我突然想到说不定top是一个Category实例呢,尝试了一下top.id,果然成功了。
Action:
public
class
DemoAction {
private
Map
<
Integer, List
<
Book
>>
bookMap;
private
List
<
Category
>
categoryList;
public
String execute()
throws
Exception {
categoryList
=
new
ArrayList
<
Cateogry
>
();
Category category;
category
=
new
Category();
category.setId(
1
);
category.setName(
"
Fiction
"
);
categoryList.add(category);
category
=
new
Category();
category.setId(
2
);
category.setName(
"
Java
"
);
categoryList.add(category);
bookMap
=
new
HashMap
<
Integer, List
<
Book
>>
();
List
<
Book
>
bookList
=
new
ArrayList
<
Book
>
();
Book book;
book
=
new
Book();
book.setId(
1
);
book.setName(
"
Harry Porter
"
);
book.setCategoryId(
1
);
bookList.add(book);
book
=
new
Book();
book.setId(
2
);
book.setName(
"
Nightmare
"
);
book.setCategoryId(
1
);
bookList.add(book);
bookMap.put(
1
, bookList);
bookList
=
new
ArrayList
<
Book
>
();
book
=
new
Book();
book.setId(
3
);
book.setName(
"
Thinking in Java
"
);
book.setCategoryId(
2
);
bookList.add(book);
book
=
new
Book();
book.setId(
4
);
book.setName(
"
Head First Design Patterns
"
);
book.setCategoryId(
2
);
bookList.add(book);
bookMap.put(
2
, bookList);
return
SUCCESS;
}
//
getter and setter..
}
评论
#
re: Struts2中doubleselect的使用方法[未登录]
回复
更多评论
2008-03-28 12:43 by
allenny
Struts2很多标签的用法要靠猜的,真是很郁闷
#
re: Struts2中doubleselect的使用方法
回复
更多评论
2008-03-29 11:22 by
usherlight
是的,感觉struts2的文档还是不够详细具体。
#
re: Struts2中doubleselect的使用方法
回复
更多评论
2008-04-08 16:44 by
struts2
经测试这段代码有以下几个问题,
1、代码第二行,
private Map<Integer, List<Book>> bookList;
应该是
private Map<Integer, List<Book>> bookMap;
2、book 里面只有一个值,由于没有声明book 类型为singleton,所有你存那么多值,最终在页面最的时候只有一个,那就是 "Head First Design Patterns"
最后谢谢楼主给了我一个提示,最终解决了我的问题。
#
re: Struts2中doubleselect的使用方法
回复
更多评论
2008-04-10 10:40 by
usherlight
谢谢你指出代码中的错误。我这段代码不是在Eclipse这样的集成开发环境里写的,所以出现了一些错误。
#
re: Struts2中doubleselect的使用方法[未登录]
回复
更多评论
2008-04-14 18:09 by
阿伟
不知道为什么总是报:“FreeMarker template error!”的错误???
#
re: Struts2中doubleselect的使用方法[未登录]
回复
更多评论
2008-04-14 18:17 by
阿伟
刚解决,<s:form 里面没加name这个属性,疯掉....
#
re: Struts2中doubleselect的使用方法
回复
更多评论
2008-06-26 10:05 by
wu
报模块找不到的错误,
The module has not been deployed.
See the server log for details.
at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:174)
at org.netbeans.modules.j2ee.ant.Deploy.execute(Deploy.java:104)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor121.invoke(Unknown Source)
在netbeans中加入struts2,只加了最基本的5个jar包。偶是菜鸟。。。
完全不知道怎么解决。
#
re: Struts2中doubleselect的使用方法
回复
更多评论
2008-06-27 13:12 by
usherlight
@wu
是在什么地方发现的这个错误?能说得再详细一些吗?
#
re: Struts2中doubleselect的使用方法
回复
更多评论
2008-08-04 11:45 by
xingdian119
高手,拜托给看看这个问题,先谢谢啦。
http://www.javaeye.com/problems/2059
#
re: Struts2中doubleselect的使用方法
回复
更多评论
2008-09-12 18:50 by
waylon
LZ我按照你上面写的做了一下,结果不能成功
抛出了异常
严重: Servlet.service() for servlet jsp threw exception
tag 'doubleselect', field 'list': The requested list key 'categoryMap.get(top.id)' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
貌似这个标签本身就有个缺陷......
(注:我的配置包就是最基本的5个,其他的配置也是正确的,而且也测试了多次,在网上也找了一些类似的资料,结果还是报错)
#
re: Struts2中doubleselect的使用方法
回复
更多评论
2008-09-12 18:50 by
waylon
我的struts.xml配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"
http://struts.apache.org/dtds/struts-2.0.dtd">
<!-- struts 是struts2 的根元素 -->
<struts>
<!-- Struts2 的action 必须放在制定的包空间下定义 -->
<package name="login" extends="struts-default">
<action name="Login" class="org.waylon.DemoAction">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
#
re: Struts2中doubleselect的使用方法
回复
更多评论
2008-09-12 18:53 by
waylon
index.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>dfsdfd</title>
<s:head />
</head>
<body>
<s:form action="Login" name="login">
<s:doubleselect list="categoryList" listKey="id" listValue="name"
doubleName="bookId" doubleList="bookMap.get(top.id)" doubleListKey="id" doubleListValue="name" theme="simple" formName="login"/>
</s:form>
</body>
</html>
#
re: Struts2中doubleselect的使用方法
回复
更多评论
2008-09-12 18:54 by
waylon
然后3个java文件和你的一样,但是就是运行不起....
不知道为什么?
望LZ给予解答
#
re: Struts2中doubleselect的使用方法
回复
更多评论
2008-09-13 18:59 by
usherlight
@waylon
根据错误信息,错误是因为你的bookMap.get(top.id)返回的结果不是一个list,
那么需要检查以下一些东西:
1. bookMap的值是否正确(bookMap是否为空,bookMap集合里的元素值是否正确)
2. top.id的值是否正确(也就是categoryList的值是否正确)
3. categoryList里的第一个值是否是bookMap里的一个键值
#
re: Struts2中doubleselect的使用方法
回复
更多评论
2008-10-15 11:22 by
zgxer
listKey与doubleListKey 如何关联,我好像没法通过listkey筛选???
#
re: Struts2中doubleselect的使用方法
回复
更多评论
2008-10-21 19:24 by
usherlight
@zgxer
doubleSelect的运行原理是这样的:
list属性指定了一个list,这个list中的值可以是一个key-value对,也可以是一个JavaBean,如果是JavaBean,需要用listKey和listValue来指定list的key和value使用JavaBean中的哪个属性。
doubleList也是一个list,但是如何实现联动的呢?关键就是在于bookList的写法是:top关键字的应用。在我的例子中是这样的:doubleList="bookMap.get(top.id)",bookMap.get(top.id)返回的就是一个List,而且是根据top.id返回的List,top代表是就是list当前选中的对象。
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
Selenium 下载文件
openpgp 验证签名
解决apache james 3.0 Beta5不能发送邮件的问题
简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值
简要说明如何在eclipse中的tomcat中进行配置使用springloaded在热加载更改的类
使用VisualVM来监控包装为windows服务的java程序
将java.util.logging的日志统一输出到slf4j的框架中
OpenPGP加密解密文件
Netty
Active MQ
Powered by:
BlogJava
Copyright © 云自无心水自闲
日历
<
2008年3月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
.Net(6)
Acegi(2)
Ajax(3)
AngularJS(5)
AngularJS
Appfuse(12)
Bootstrap(2)
Cairngorm(14)
Dojo(2)
Eclipse(3)
Extjs(2)
Flex(60)
Flex2(51)
FreeMarker(2)
GIMP(1)
Hibernate(2)
iBatis(9)
Java(129)
JFinal(1)
JQuery(3)
JSF(2)
MyBatis(2)
MySQL(4)
Netbeans(3)
Resin
RichFaces
Spring(4)
Spring Security(3)
SpringSide(2)
Struts2(21)
Tapestry(26)
XML(1)
压缩文件
密码(1)
心得体会(125)
数据库(8)
随笔档案
2017年8月 (1)
2017年6月 (2)
2017年5月 (1)
2017年3月 (1)
2017年2月 (1)
2016年12月 (2)
2016年11月 (2)
2016年10月 (1)
2016年9月 (3)
2016年8月 (2)
2016年6月 (1)
2016年5月 (1)
2016年4月 (2)
2016年3月 (1)
2016年2月 (2)
2016年1月 (1)
2015年12月 (1)
2015年11月 (3)
2015年10月 (3)
2015年8月 (2)
2015年7月 (1)
2015年6月 (3)
2015年4月 (2)
2015年3月 (1)
2015年2月 (5)
2015年1月 (6)
2014年12月 (1)
2014年11月 (2)
2014年2月 (1)
2014年1月 (3)
2013年12月 (1)
2013年10月 (1)
2013年8月 (2)
2013年3月 (1)
2012年11月 (2)
2012年10月 (1)
2012年9月 (2)
2011年8月 (4)
2011年6月 (1)
2011年5月 (1)
2011年3月 (1)
2011年2月 (1)
2011年1月 (1)
2010年12月 (2)
2010年11月 (3)
2010年10月 (1)
2010年9月 (1)
2010年8月 (2)
2010年7月 (4)
2010年6月 (6)
2010年5月 (1)
2010年4月 (1)
2010年3月 (6)
2010年2月 (4)
2010年1月 (4)
2009年12月 (1)
2009年11月 (1)
2009年10月 (2)
2009年9月 (3)
2009年8月 (4)
2009年7月 (3)
2009年6月 (4)
2009年5月 (6)
2009年4月 (4)
2009年1月 (1)
2008年12月 (10)
2008年11月 (2)
2008年9月 (1)
2008年8月 (2)
2008年7月 (2)
2008年6月 (1)
2008年5月 (1)
2008年4月 (2)
2008年3月 (3)
2008年2月 (7)
2008年1月 (3)
2007年12月 (2)
2007年9月 (4)
2007年8月 (3)
2007年7月 (4)
2007年6月 (1)
2007年5月 (1)
2007年4月 (11)
2007年3月 (15)
2007年2月 (11)
2007年1月 (8)
2006年12月 (9)
2006年11月 (3)
2006年10月 (4)
2006年9月 (6)
2006年8月 (3)
2006年6月 (2)
2006年5月 (1)
2006年4月 (3)
2006年3月 (16)
2006年2月 (5)
最新随笔
1. 记录备忘
2. plugin manage for 64 bit notepadd++
3. Remote Git Server migration
4. 一些小工具
5. 一个好用的小工具AutoHotKey
6. First Vue.js html page
7. SLF4J 打印数组
8. mysql遗忘root密码
9. Eclipse启动时update indexes很慢
10. 从pdf文件中提取文本
积分与排名
积分 - 1122425
排名 - 27
最新评论
1. re: 使用AngularJS与服务器通讯
qwerqwer
--ewrqer
2. re: OpenPGP加密解密文件
还是直接拿源码包中的 两个实例代码,直接运行就OK,这个类改的,解密文件跳过去了。
--vigo
3. re: Struts2利用stream直接输出Excel
dsaasdsadsadd as
--sad
4. re: SwisSql Oracle to Sql Server3.0(一个从Oracle迁移到SqlServer数据库工具)的破解手记[未登录]
评论内容较长,点击标题查看
--s
5. re: SwisSql Oracle to Sql Server3.0(一个从Oracle迁移到SqlServer数据库工具)的破解手记[未登录]
可以使用
--s
阅读排行榜
1. 连接Oracle 10g时ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME 错误的解决(273809)
2. Extjs Tree + JSON + Struts2 (43634)
3. Java Swing界面如何动态调整大小(自适应)(21732)
4. 简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(18451)
5. 一些小工具(17409)
6. Flex与JavaScript的交互:调用JavaScipt或者被JavaScript调用(16567)
7. struts2使用iterator标签显示嵌套Map(15294)
8. DevExpress的XtraReports使用心得(帮助文档)(14499)
9. 在java程序中访问windows有用户名和密码保护的共享目录(12920)
10. Struts2 and Ajax --使用Dojo和Div(12231)
评论排行榜
1. 连接Oracle 10g时ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME 错误的解决(50)
2. Extjs Tree + JSON + Struts2 (49)
3. SwisSql Oracle to Sql Server3.0(一个从Oracle迁移到SqlServer数据库工具)的破解手记(23)
4. Struts2中doubleselect的使用方法(16)
5. JRebal(原名JavaRebel)破解小记(16)