wicket问题无法将一个列表中的项目移到另一个列表中

问题描述

|| 我有一个门面板。它具有彼此相邻的两个文本字段以及彼此相邻的两个ListMultipleChoice控件,以及在这两个ListMultipleChoice \之间的两个按钮“添加删除”。 除非我在文本字段中输入了一些列表框之前的值,否则无法将它们从一个列表框移至另一个列表框。 如果在文本字段中输入值,则可以移动项目。 请在下面找到代码
TextField<BigDecimal> textfield1 = new TextField<BigDecimal>(\"value1\")
{
    private static final long serialVersionUID = 8199976201679629866L;

    @Override
    public IConverter getConverter(Class<?> type) {
        return new FixedDecimalPlacesConverter();
    }

};
textfield1.setType(BigDecimal.class);
textfield1.setLabel(new Model<String>(\"Value1\"));
textfield1.setrequired(true)
.add(PositiveNumberValidator.getInstance())
.add(new FixedDecimalPlacesValidator(2));
add(new FeedBackBorder(\"Border1\").add(textfield1));

TextField <BigDecimal> textfield2 = new TextField<BigDecimal>(\"value2\")
{
    private static final long serialVersionUID = 8199976201679629866L;

    @Override
    public IConverter getConverter(Class<?> type) {
        return new FixedDecimalPlacesConverter();
    }

};
textfield2.setType(BigDecimal.class);
textfield2.setoutputMarkupId(true);
textfield2.setLabel(new Model<String>(\"Value2\"));
textfield2.setrequired(true)
.add(PositiveNumberValidator.getInstance())
.add(new FixedDecimalPlacesValidator(2));
add (new FeedBackBorder(\"Border2\").add(textfield2));

ChoiceRenderer<UserBean> choiceRenderer = new ChoiceRenderer<UserBean>(\"userName\",\"userID.ID\");

availableusers= new ListMultipleChoice<UserBean>( \"availableusersBean\",availableusersList,choiceRenderer );
availableusers.setoutputMarkupId(true);
availableusers.setLabel(new Model<String>(\"Available Users\"));
add(new FeedBackBorder(\"availableusersBorder\").add(availableusers));

selectedUsers = new ListMultipleChoice<UserBean>( \"selectedUsersBean\",selectedUsersList,choiceRenderer );
selectedUsers.setoutputMarkupId(true);
selectedUsers.setLabel(new Model<String>(\"Selected Users\"));
add(new FeedBackBorder(\"selectedUsers Border\").add(selectedUsers ));

add = new AjaxButton(\"add\") {
    @Override
    protected void onSubmit(AjaxRequestTarget target,Form form) {
        update(target,availableusers.getModelValue(),availableusers,selectedUsers);
    }
};
add(new FeedBackBorder(\"addBorder\").add(add));

remove = new AjaxButton(\"remove\") {
    @Override
    protected void onSubmit(AjaxRequestTarget target,selectedUsers.getModelValue(),selectedUsers,availableusers);
    }
};
add(new FeedBackBorder(\"removeBorder\").add(remove));
可能是什么问题?     

解决方法

        
add.setDefaultFormProcessing(false);
remove.setDefaultFormProcessing(false);
我正在使用org.apache.wicket.markup.html.form.Button,它允许您使用
setDefaultFormProcessing(boolean)
来单击按钮来关闭完整表单提交。这应该允许您在不提交完整表格的情况下处理操作,因此不验证必需的文本字段。     ,        乍一看:您的TextFields是必需的。通过AjaxButtons提交表单不会为无效表单触发
onSubmit
方法,而是触发
onError
方法。 可能的解决方案(无特定顺序): 将列表移到嵌套表单 将
onSubmit
的内容移至单独的方法,并从
onError
进行调用 将项目移动逻辑移动到不触发表单提交的基于JavaScript的纯行为或修饰器。