我有一个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, Form form) {
update(target, selectedUsers.getModelValue(), selectedUsers , availableUsers);
}
};
add(new FeedBackBorder("removeBorder").add(remove));
可能是什么问题?
答案 0 :(得分:0)
乍一看:您的TextFields是必需的。通过AjaxButtons提交表单不会触发无效表单的onSubmit
方法,而是onError
方法。
可能的解决方案(无特定顺序):
onSubmit
的内容移至单独的方法,并从onError
调用答案 1 :(得分:0)
add.setDefaultFormProcessing(false);
remove.setDefaultFormProcessing(false);
我正在使用org.apache.wicket.markup.html.form.Button,它允许您使用setDefaultFormProcessing(boolean)
按钮单击关闭完整表单提交。这应该允许您在不提交完整表单的情况下处理操作,因此不会验证所需的文本字段。