wicket框架下生成多选框ListMultipleChoice,第二个多选框的内容根据第一个框动态生成

生成两个多选框ListMultipleChoice,第二个多选框的值要随第一个框的选择情况而动态生成。
Html代码:

<!-- size=8 意为下拉框一次可以显示的数据条数为8    multiple="multiple" 表明这是多选下拉框-->
<form wicket:id="firstForm">
<select multiple="multiple" size="8" wicket:id="allDepartment"></select>
<select multiple="multiple" size="8" wicket:id="userPart"></select>
</form>

细节说明(数据准备):
1.第一个框显示团队信息,下拉框为deptSelect
*填充第一个框的数据源为List《UserDepartment》 listDepartment
*UserDepartment类中有两个属性name和Id
2.第二个框显示团队成员信息,下拉框为userSelect
*填充第二个框的数据源为List《User》 listUser
*User类中有两个属性name和id

java代码:

public class Page{
    //表单控件
    private Form queryForm;

    //定义团队多选框和参与者多选框
    private ListMultipleChoice<UserDepartment> deptSelect;
    private ListMultipleChoice<User> userSelect;

      //选中的团队Id列表   //选中的用户Id列表
    private ArrayList<Integer> departmentIds = new ArrayList<Integer>();
    private ArrayList<Integer> userIds =new ArrayList<Integer>();

    //定义存储动态得到的User集合
    private ArrayList<User> listUser;

public Page(){

       queryForm=new Form("firstForm");
       this.add(queryForm);

       //团队下拉列表框和参与者下拉列表框的初始化
       //先定义一个空list<User>,目的是在没有选择任何团队时,参与者选择框无法完成初始化而报错。
        deptSelect = createDeptSelect("allDepartment");
        userSelect = createUserSelect("userPart",new ArrayList<User>());

        queryForm.add(deptSelect);
        queryForm.add(userSelect);
}

 //编写团队多选框的生成方法
    private ListMultipleChoice<UserDepartment> createDeptSelect(String id) {

        //参数1:key(显示)  参数2:value(隐藏)   其实两个参数都是从数据库中获取的列,存在了预定义对象对应的变量中
        ChoiceRenderer choiceRenderer = new ChoiceRenderer("name" ,"departmentId" );

        List<UserDepartment> listDepartment=你的数据,返回集合

final ListMultipleChoice<UserDepartment> teamSelect =
 new ListMultipleChoice(id,new Model<UserDepartment>(), listDepartment,choiceRenderer);

        //获得当前选中项
        teamSelect.add(new AjaxFormComponentUpdatingBehavior("onChange") {
            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                //将选择后的值转换成字符串
                String ss=teamSelect.getModelValue();

                if(ss!=null) {                
                 //去除";"符,转换成字符串数组
                 String[] ssTr = ss.split(";");

                 //将上一个点击事件的内容删除,确保每次点击只能获取当下的结果
                 departmentIds.clear();

                    for (int i = 0; i < ssTr.length; i++) {                    
                        //将点击的结果加入到列表中,用于数据库查询                        departmentIds.add(Integer.parseInt(ssTr[i]));                        
                    }

                    //根据departmentIds里的值来动态查询,生成listUser 
                    listUser = getAllUser(departmentIds);

                    userSelect = createUserSelect("userPart", listUser);
                    userSelect.setOutputMarkupId(true);
                    this.addOrReplace(userSelect);
                    target.add(userSelect);
                }
            }
        });
        return teamSelect;
    }

     //编写参与者多选框的生成方法
    private ListMultipleChoice<User> createUserSelect(String id,List<User> userBeanList) {

        //name和userId为User类的两个属性
        ChoiceRenderer choiceRenderer = new ChoiceRenderer("name" ,"userId" );

        final ListMultipleChoice<User> userSelect = new ListMultipleChoice(id,new Model<User>(), userBeanList,choiceRenderer);

        /*当重新选择团队时,并没有想选择参与者时,也就是没有发生参与者的点击事件,必须要把之前保存参与者的id清空,否则结果会错误*/
        userIds.clear();
        userSelect.add(new AjaxFormComponentUpdatingBehavior("onChange") {
            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                String ss=userSelect.getModelValue();
                if(ss!=null){
                    String[] uss=ss.split(";");
                    for(int i=0;i<uss.length;i++){
                    //同样可以获取选中的成员Id,如果以后可以用到的话。
                        userIds.add(Integer.parseInt(uss[i])); 
                    }
                }
            }
        });
        return userSelect;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值