gpt4 book ai didi

java - Wicket,DropDownChoice 选择如何更改另一个 DropDownChoice 的选项?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:04 25 4
gpt4 key购买 nike

Wicket 中有什么东西可以做两个 下拉选项,以便第一个 doprdownchoice 的第一个选择更改第二个的所有选项吗?

最佳答案

您应该使用第一个选择的值来确定第二个的值。

在这个例子中,我选择使用触发 Ajax 更新并执行值更改的 AjaxFormComponentUpdatingBehavior。我提供了一个简单的示例,即使用在第一个选项中选择的国家/地区的联邦州填充第二个 DropDownChoice

请注意,我在此示例中使用的是 wicket 1.4,不过在较新的版本中应该不会有太大差异。

   // two countries
final String aut = "AUT";
final String ger = "GER";

// their states
final List<String> autStates = Arrays.asList(new String[] { "V", "T", "S", "W" });
final List<String> gerStates = Arrays.asList(new String[] { "NRW", "B", "BW" });

// mapping, you should really get this data from a service or have a constant
final Map<String, List<String>> countryToState = new HashMap<String, List<String>>(2);
countryToState.put(aut, autStates);
countryToState.put(ger, gerStates);

// the container to send back via ajax
final WebMarkupContainer cont = new WebMarkupContainer("cont");
cont.setOutputMarkupId(true);
add(cont);

final Model<String> stateModel = new Model<String>();
final DropDownChoice<String> countries = new DropDownChoice<String>("countries", new Model<String>(), new ArrayList<String>(countryToState.keySet()));
final DropDownChoice<String> states = new DropDownChoice<String>("states", stateModel, new LoadableDetachableModel<List<String>>() {

@Override
protected List<String> load() {
final String country = countries.getModelObject();
final List<String> list = countryToState.get(country);

return list != null ? list : new ArrayList<String>(0);
}
});

countries.add(new AjaxFormComponentUpdatingBehavior("onchange") {

@Override
protected void onUpdate(AjaxRequestTarget target) {
// just add the container to see the results
target.addComponent(cont);
}

});

cont.add(countries);
cont.add(states);

关于java - Wicket,DropDownChoice 选择如何更改另一个 DropDownChoice 的选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23353416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com