代码改变世界

Struts2 的checkboxlist怎么默认选中

2010-06-04 16:36  DeguangLi  阅读(1431)  评论(0编辑  收藏  举报

发表于 @ 2008年03月16日 23:55:00

 

前阵子在使用struts2的checkboxlist,遇到不会默认选中的问题,花了不少时间,终于解决了.现在把它记录下来.

项目里面有两个实体对象 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的设置的值自动选中里面的项.