#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 Добро пожаловать. Пожалуйста, не забудьте проголосовать за мой ответ, если он показался вам полезным.