HI,
См. следующий код:
<h:selectOneMenu id="countries" value="#{countryBean.selectedCountry}" onchange="submit()
valueChangeListener="#{countryBean.changeCountry}">
<f:selectItems value="#{countryBean.countries }" />
</h:selectOneMenu>
Поддержка Bean
public void changeCountry(ValueChangeEvent event){
String newValue = (String)event.getNewValue();
String oldValue = (String)event.getOldValue();
System.out.println("New Value : " + newValue);
System.out.println("Old Value : " + oldValue);
if ("1".equals(newValue)){
this.countries = new ArrayList<SelectItem>();
this.cities.add(new SelectItem("1","Delhi"));
this.cities.add(new SelectItem("2","Mumbai"));
}
if ("2".equals(newValue)){
this.cities = new ArrayList<SelectItem>();
this.cities.add(new SelectItem("1","Mossco"));
}
}
Пожалуйста, дайте мне знать, правильна ли реализация. Он работает нормально. Мои вопросы:
- В чем преимущество добавления тега f: valueChangeListener внутри тега h: selectOneMenu. Я использовал обычный атрибут valueChangeListener = "# {countryBean.changeCountry}".
- Нужно ли использовать onchange = "submit() этот код для изменения значений.
- В чем разница между написанием пользовательских слушателей путем реализации интерфейса ActionListener и просто использованием атрибута в тегах UIComponent (action = "methodName" ). Пожалуйста, объясните мне.