云自无心水自闲

天平山上白云泉,云自无心水自闲。何必奔冲山下去,更添波浪向人间!
posts - 128, comments - 167, trackbacks - 0, articles - 6
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Struts2中doubleselect的使用方法

Posted on 2008-03-27 22:08 云自无心水自闲 阅读(1126) 评论(6)  编辑  收藏 所属分类: 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..
}



Feedback

# 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这个属性,疯掉....

标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-10 10:48 编辑过