先看我action的修改页面方法
public String editui() {
PrivilegeGroup group = privilegeGroupManager.find(PrivilegeGroup.class, pgf.getGroupid());
pgf.setName(group.getName());
if(group.getPrivileges()!=null && group.getPrivileges().size()>0) {
SystemPrivilegePK[] str = new SystemPrivilegePK[group.getPrivileges().size()];
int i=0;
for(SystemPrivilege de:group.getPrivileges()) {
str[i]=de.getId();
i++;
}
pgf.setPrivileges(str);
}
systemPrivileges = systemPrivilegeManager.getScrollData(
SystemPrivilege.class).getGetResult();
return "editui";
}
再看JSP
<s:checkboxlist name="privileges" listKey="id.zuHe" list="systemPrivileges" listValue="name" />
在action中我已经对privileges设置了初始值了,用s:debug都可以看到,我这里用的是联合主键,之前用单个主键做都没问题的,不知道是不是联合主键就要改什么的,求解决啊搞了好久都没搞出来,高手们帮帮忙

解决方案 »

  1.   

    改成listKey="id",但是这样改就没有值了就不能修改了,现在应该是转换器的问题,贴代码出来大家帮忙看看public class SystemPrivilegePKConverter  extends DefaultTypeConverter{
    @SuppressWarnings("unchecked")
    public Object convertValue(Map context,Object value,Class clazz){
    if(clazz==String.class){
    SystemPrivilegePK id = (SystemPrivilegePK) value;
    return id.getModel()+","+ id.getPrivile();
    }
    if(clazz==SystemPrivilegePK.class){
    try{
    String idstr = (String)value;
    String[] ids = idstr.split(",");
    if(ids.length==2){
    return new SystemPrivilegePK(ids[0], ids[1]);
    }
    }catch (Exception e) {}
    }
    return null;
    }
    }要是这个转换器出去的时候可以调用就没问题,但是他没有调用,添加的时候他可以转换public String editui() {
    PrivilegeGroup group = privilegeGroupManager.find(PrivilegeGroup.class, pgf.getGroupid());
    pgf.setName(group.getName());
    if(group.getPrivileges()!=null && group.getPrivileges().size()>0) {
    SystemPrivilegePK[] str = new SystemPrivilegePK[group.getPrivileges().size()];
    int i=0;
    for(SystemPrivilege de:group.getPrivileges()) {
    str[i]=de.getId();
    i++;
    }
    pgf.setPrivileges(str);
    }
    systemPrivileges = systemPrivilegeManager.getScrollData(
    SystemPrivilege.class).getGetResult();
    return "editui";
    }