из-за проблемы с калиткой невозможно переместить элементы из одного списка - PullRequest
0 голосов
/ 11 июня 2011

У меня есть калитка.Он имеет два текстовых поля, смежные друг с другом, и два элемента управления 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));

В чем может быть проблема?

Ответы [ 2 ]

0 голосов
/ 17 июня 2011

add.setDefaultFormProcessing(false); remove.setDefaultFormProcessing(false);

Я использую org.apache.wicket.markup.html.form.Button, который позволяет отключить отправку полной формы нажатием кнопки setDefaultFormProcessing(boolean).Это должно позволить вам обрабатывать действия без отправки полной формы, поэтому не нужно проверять необходимые текстовые поля.

0 голосов
/ 14 июня 2011

На первый взгляд: Ваши текстовые поля обязательны для заполнения.Отправка формы через AjaxButtons не вызовет метод onSubmit для недопустимой формы, но метод onError.

Возможные решения (без определенного порядка):

  • ПеремещениеСписки во вложенную форму
  • Перемещение содержимого onSubmit в отдельный метод и вызов его из onError too
  • Перемещение логики перемещения элемента в чисто поведение на основе JavaScript илиДекоратор, который не вызывает отправку формы.
...