Struts2中doubleselect的使用方法

    技术2024-10-26  26

    在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当前选中的对象。
    最新回复(0)