问题描述
||
我有一个门面板。它具有彼此相邻的两个文本字段以及彼此相邻的两个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的纯行为或修饰器。