Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wicket问题无法将项目从一个列表移动到另一个列表_Wicket - Fatal编程技术网

wicket问题无法将项目从一个列表移动到另一个列表

wicket问题无法将项目从一个列表移动到另一个列表,wicket,Wicket,我有一个小门面板。它有两个彼此相邻的文本字段和两个彼此相邻的ListMultipleEchoice控件,以及两个按钮在这两个ListMultipleEchoice之间添加和删除 我无法将项目从一个列表框移动到另一个列表框,除非在列表框之前的文本字段中输入一些值 如果在文本字段中输入值,我就可以移动项目 请在下面查找代码 TextField<BigDecimal> textfield1 = new TextField<BigDecimal>("value1") {

我有一个小门面板。它有两个彼此相邻的文本字段和两个彼此相邻的ListMultipleEchoice控件,以及两个按钮在这两个ListMultipleEchoice之间添加和删除

我无法将项目从一个列表框移动到另一个列表框,除非在列表框之前的文本字段中输入一些值

如果在文本字段中输入值,我就可以移动项目

请在下面查找代码

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, Form form) {
        update(target, selectedUsers.getModelValue(), selectedUsers , availableUsers);
    }
};
add(new FeedBackBorder("removeBorder").add(remove));

可能是什么问题?

乍一看:您的文本字段是必需的。通过AjaxButtons提交表单不会触发无效表单的onSubmit方法,而是触发onError方法

无特定顺序的可能解决方案:

将列表移动到嵌套表单 将onSubmit的内容移动到单独的方法,并从onError调用它 将项目移动逻辑移动到一个纯基于JavaScript的行为或装饰器,该行为或装饰器不会触发表单提交。 add.setDefaultFormProcessingfalse; remove.setDefaultFormProcessingfalse


我使用的是org.apache.wicket.markup.html.form.Button,它允许您使用setDefaultFormProcessingboolean按钮单击来关闭完整表单提交。这将允许您在不提交完整表单的情况下处理操作,因此不会验证所需的文本字段。

不使用调色板组件有什么具体原因吗?是的,调色板UI不同,例如:添加、删除按钮的图像。.我的UI要求我不使用调色板组件…从Wicket 1.4.13开始,调色板组件允许通过CSS自定义图像。请参见此处的Jira票证:。您还可以覆盖组件的HTML。更新方法中有什么?@PeterMortensen为什么将所有类名更改为小写?