java - Apache wicket - DropDownChioce.onSelectionChanged() 不起作用

标签 java apache events wicket dropdownchoice

我最近开始使用 Wicket 口。我尝试在您的项目示例中使用“Apache wicket by Vaynberg”一书中的“链接选择框”。

我重新创建了书中的示例:

public class LinkedSelectboxesPage extends WebPage {

private Country country;
private City city;

public LinkedSelectboxesPage() {
    Database.buildData();
    country = Database.getCountries().get(0);

    FeedbackPanel feedbackPanel = new FeedbackPanel("feedback");
    add(feedbackPanel);

    Form form = new Form("form");
    add(form);

    DropDownChoice<Country> countries = new DropDownChoice<Country>(
            "countries",
            new PropertyModel<Country>(this, "country"),
            new CountriesModel(),
            new ChoiceRenderer<Country>("name", "code")) {
        protected boolean
        wantOnSelectionChangedNotifications() {
            return true;
        }

        protected void
        onSelectionChanged(Country newSelection) {
            city = null;
        }
    };
    countries.setRequired(true);
    form.add(countries);

    DropDownChoice<City> cities = new DropDownChoice<City>(
            "cities",
            new PropertyModel<City>(this, "city"),
            new CitiesModel(),
            new ChoiceRenderer<City>("name", "code"));
    cities.setRequired(true);
    form.add(cities);
}

private static class CountriesModel extends LoadableDetachableModel<List<? extends Country>> {
    protected List<? extends Country> load() {
        return Database.getCountries();
    }
}

private class CitiesModel extends LoadableDetachableModel<List<? extends City>> {
    protected List<? extends City> load() {
        return Database.getCities(country.getCode());
    }
}
}

当我尝试在项目中使用链接选择框时,固定在函数体前面的断点尚未实现。

public class AddArticlePanel extends Panel {

private Type type;
private Subtype subtype;

private List<Type> typesList;
private List<Subtype> subtypesList;

@SpringBean
@SuppressWarnings("unused")
public static ITypeDao typeDao;

@SpringBean
@SuppressWarnings("unused")
private ISubtypeDao subtypeDao;

public AddArticlePanel(String id) {
    super(id);

    this.typesList = typeDao.loadAllTypes();
    this.type = this.typesList.get(0);

    Form form = new Form("form");
    add(form);

    FormComponent<String> tbTitleArticle = new TextField<String>("titleArticle").setRequired(true);
    form.add(tbTitleArticle);

    FormComponent<String> taTextArticle = new TextArea<String>("textArticle").setRequired(true);
    form.add(taTextArticle);

    DropDownChoice<Type> ddcTypes = new DropDownChoice<Type>(
            "typeArticle",
            new PropertyModel<Type>(this, "type"),
            new TypesModel(),
            new ChoiceRenderer<Type>("name", "id")) {

        protected boolean wantOnSelectionChangedNotifications() {
            return true;
        }

        protected void onSelectionChanged(Type newSelection) {
            type = null;
        }
    };
    ddcTypes.setRequired(true);
    form.add(ddcTypes);

    DropDownChoice<Subtype> ddcSubtypes = new DropDownChoice<Subtype>(
            "subtypeArticle",
            new PropertyModel<Subtype>(this, "subtype"),
            new SubtypesModel(),
            new ChoiceRenderer<Subtype>("name", "id"));
    ddcSubtypes.setRequired(true);
    form.add(ddcSubtypes);
}

public AddArticlePanel(String id, IModel<?> model) {
    super(id, model);
}

private static class TypesModel extends LoadableDetachableModel<List<? extends Type>> {
    protected List<? extends Type> load() {
        return typeDao.loadAllTypes();
    }
}

private class SubtypesModel extends LoadableDetachableModel<List<? extends Subtype>> {
    protected List<? extends Subtype> load() {
        return subtypeDao.loadSubtypesByTypeId(type.getId());
    }
}
}

我不明白为什么会发生这种情况。请帮助我,对不起我的英语。

最佳答案

在 onSelectionChanged 方法中,将类型设置为 null。这是支持所需 DropDownChoice 字段 ddcTypes 模型的成员,而不是书中的示例,其中国家/地区 ddc onSelectionChanged 方法重置城市变量。

在您的情况下,您将类型的每个更改重置为 null,从而使您的表单无效并阻止它执行任何有用的操作。

关于java - Apache wicket - DropDownChioce.onSelectionChanged() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11408862/

相关文章:

swift - 停止在 Swift 中监听 NSEvent

c++ - MFC CFormView OnKeyDown 事件未触发

c++ - 如何在线程完成工作时触发事件

php - 我的脚本中是否存在内存泄漏,或者是另一个罪魁祸首?

apache - Apache 是否允许根据子请求的结果授权 HTTP 请求?

java - 使用不确定元素对 json 数据建模

java - Android SipManager : android.net.sip.SipException : SipService. createSession() 返回 null

windows - tomcat8在windows上如何关闭自动启动

java - java中如何通过转义字符进行分割?

java - 如何将透明png设置为JButton?