怎么默认选Struts2 中的checkboxlist

阿超 发表于 2009-09-04 07:55 | 来源: | 阅读 403 次

项目里面有两个实体对象 Lace(花边) 和Tag(标签,花边属性),关系是 n v n.即一个花边对象可以有多个花边属性,一个花边属性可以被多个花边所拥有.代码如下:

public class Lace { 
    private Integer id; 
    private String name; 
    private List<Tag> tags; 
  //…省略其他属性及其getter和setter
}
 
public class Tag { 
private Integer id; 
private String name; 
private List<Lace> laces; 
//…省略其他属性及其getter和setter
}

当时要做的一个功能是编辑或新建一个Lace对象时可以使用chekbox选中Tag,并将这些属性保存到Lace对象的tags集合里面.

Action的代码如下:

public class LaceAction extends ActionSupport { 
//Tag集合. 
private List<Tag> tags; 
 
//当前选中(或当前编辑的Lace对象)的所有Tag的id. 
private Integer[] selectTagIds; 
 
//当前编辑的Lace对象 
private Lace lace; 
//..省略其他代码和getter和setter 
 
public String load() throws Exception …{ 
if (id != null) …{ 
                //获取当前编辑的Lace对象 
                setLace(laceService.getLaceById(id)); 
//设置当前选中的Tag, 
if (lace.getTags().size() > 0) …{ 
                    selectTagIds = new Integer[lace.getTags().size()]; 
for (int i = 0; i < this.lace.getTags().size(); i++) …{ 
                    selectTagIds[i] = lace.getTags().get(i).getId(); 
                } 
            } 
        } 
return SUCCESS; 
    } 
 
public String save() throws Exception …{ 
            List<Tag> laceTags = lace.getTags(); 
// 设置花边属性 
if (selectTagIds != null) …{ 
for (Integer tagId : selectTagIds) …{ 
                    Tag t = laceService.getTagById(tagId)); 
if (!laceTags.contains(t)) 
                        lace.getTags().add(t); 
            } 
        } 
            laceService.saveLace(lace); 
return SUCCESS;
}

页面的代码:

<s:checkboxlist name="selectTagIds" list="tags" listKey="id" listValue="name" />

这里要说明一下,selectTagIds为Action里面的一个Integer[] ,用来存放当前用户选中的chekbox的key值,这样当编辑的时候,action为selectTagIds设置了当前编辑的lace对象的tag集合的所有id,checkboxlist 会根据selectTagIds的设置的值自动选中里面的项.

喜欢Java豆技术站点的文章,那就通过 RSS Feed 功能订阅阅读吧!

我要评论

*

* 绝不会泄露



返回首页 | 关于我们 | 联系我们 | 广告合作 | 网站地图 | 友情链接 | 版权声明 | 模板设计