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

xiaoxiao2021-02-28  111

生成两个多选框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; } }
转载请注明原文地址: https://www.6miu.com/read-36564.html

最新回复(0)