Как преобразовать контрольную группу в FormComponent для проверки

#java #checkbox #wicket #dropdownchoice

#java #флажок #калитка #выпадающий список

Вопрос:

У меня есть выпадающий список и флажок. Добавлен код для выдачи ошибки, когда ни один из них не выбран пользователем при отправке.

CheckGroup billableGroup = новая CheckGroup<>(идентификатор, новая модель свойств<Коллекция>(billableProjects, «проекты»)); billableGroup.add(новый CheckGroupSelector(«checkall»));

Выпадающий список billableProjectsList = новый выпадающий список<>( ……… новый ChoiceRenderer(«fullNameWithCustomer»)); Оплачиваемый список проектов.setLabel(новая модель ресурсов(«printMonth.оплачиваемый»));

form.add(новый FormComponentValidator(billableProjectsList, billableGroup)); Я не могу добавить контрольную группу в средство проверки, поскольку она не преобразуется в FormCompnent.

 public class FormComponentValidator extends AbstractFormValidator {
    private static final long serialVersionUID = 1L;
    private FormComponent<Project>[] components;

    @SuppressWarnings("unchecked")
    public FormComponentValidator(FormComponent<Project> selectedBillableProject, FormComponent<Project> selectedUnBillableProject) {
        components = new FormComponent[]{selectedBillableProject, selectedUnBillableProject};
    }

    /*
     * (non-Javadoc)
     * @see org.apache.wicket.markup.html.form.validation.IFormValidator#getDependentFormComponents()
     */
    public FormComponent<?>[] getDependentFormComponents() {
        return components;
    }

    /*
     * (non-Javadoc)
     * @see org.apache.wicket.markup.html.form.validation.IFormValidator#validate(org.apache.wicket.markup.html.form.Form)
     */
    public void validate(Form<?> form) {

        if ((org.apache.commons.lang.StringUtils.isEmpty(components[0].getInput()) || components[0].getInput() == null )
                amp;amp; org.apache.commons.lang.StringUtils.isEmpty(components[1].getInput())) {

                error(components[0], "project.Required");
            }
        }
 

Пожалуйста, дайте мне знать, как преобразовать checkgroup в FormCompenent и использовать его для проверки.

Комментарии:

1. На самом деле CheckGroup — это FormCompnent . Можете ли вы показать больше кода из вашего FormComponentValidator ?

2. @Andrea Del Bene — обновил код .

Ответ №1:

CheckGroup использует коллекцию в качестве объекта модели, в то время как DropDownChoice имеет один объект модели. Это означает, что CheckGroup< Project> недействителен, поскольку для него требуется коллекция, в то время как CheckGroup<Список< Проект>> действителен.

Вы должны «ослабить» ограничение типа в вашем FormComponentValidator, чтобы принимать общие FormComponentS:

 public class FormComponentValidator extends AbstractFormValidator {
    private static final long serialVersionUID = 1L;
    private FormComponent<?>[] components;

    @SuppressWarnings("unchecked")
    public FormComponentValidator(FormComponent<?> selectedBillableProject, FormComponent<?> selectedUnBillableProject) {
        components = new FormComponent[]{selectedBillableProject, selectedUnBillableProject};
    }

    /*
     * (non-Javadoc)
     * @see org.apache.wicket.markup.html.form.validation.IFormValidator#getDependentFormComponents()
     */
    public FormComponent<?>[] getDependentFormComponents() {
        return components;
    }

    /*
     * (non-Javadoc)
     * @see org.apache.wicket.markup.html.form.validation.IFormValidator#validate(org.apache.wicket.markup.html.form.Form)
     */
    public void validate(Form<?> form) {

        if ("".equals(Objects.stringValue(components[0].getInput(), true))
            amp;amp; "".equals(Objects.stringValue(components[1].getInput(), true))) {

                error(components[0], "project.Required");
            }


}
 

ПРИМЕЧАНИЕ: Объекты из пакета wicket.util.lang

Комментарии:

1. Изменение FormComponent на Generic typed сработало для меня 🙂 Большое спасибо @Andrea Del Bene

2. @sharonm Добро пожаловать. Пожалуйста, не забудьте проголосовать за мой ответ, если он показался вам полезным.