1.doc中的详细解析
2.两个简单的例子
<s:doubleselect label="doubleselect test1" name="menu" list="{'fruit','other'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />
<s:doubleselect label="doubleselect test2" name="menu" list="#{'fruit':'Nice Fruits', 'other':'Other Dishes'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />
这里top指的是一级中的处理的对象,而不是一级中显示的数据
3.doubleselect
务必放在<s:form/>中不然是无法成功的
4.我们来测试一下从stack values中获取数据
图示
新建User.class
package com.zk.sample.example;
public class User{
private String username;
private int age;
public void setUsername(String username){
this.username = username;
}
public void setAge(int age){
this.age = age;
}
public String getUsername(){
return username;
}
public int getAge(){
return age;
}
public User(String username,int age){
this.username = username;
this.age = age;
}
}
这里我们只用到username的属性,age可以不看
在action里
private Map<String,List<User>> links;
private List<User> linksSub;
public Map<String,List<User>> getLinks(){
return links;
}
public void setLinks(Map<String,List<User>> links){
this.links = links;
}
private List<User> users;
public List<User> getUsers(){
return users;
}
public void setUsers(List<User> users){
this.users = users;
}
users充当一级数据,之后我们通过OGNL拿到username
links当做以username为key,linksSub为值,在一级Users菜单中我们选中一个User,让后用该User的username去links找到对应的二级Users
初始化一下
users = new ArrayList<User>();
links = new HashMap<String,List<User>> ();
for(int i=0;i<10;i++){
linksSub = new ArrayList<User>();
for(int j=0;j<10;j++){
linksSub.add(new User("sub"+i + "_"+j,20+j));
}
users.add(new User("Parent"+i,20+i));
links.put("Parent"+i,linksSub);
}
setUsers(users);
由于linksSub是links中的值,所以我们不用给他set和get,我们通过links得到他的引用
在jsp写<s:debug/>
看看堆值和ActionContext
好了我们已经把需要的数据放在stack values中了,下面我们在jsp中通过OGNL得到这些数据
<s:doubleselect name="username" list='users' listKey="username"
listValue="username" doubleName="name"
doubleList="links.get(top.username)" doubleListKey="username"
doubleListValue="username" />
这些属性不懂的话就点击上面的官方doc解析
书上讲的很粗略,struts2 in action ,写的跟没写没区别