Struts2中doubleselect的使用方法
Posted on 2008-03-27 22:08 云自無心水自閑 閱讀(12157) 評論(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:
<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:

















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..
}
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..
}