你好,
请查看以下代码:
<h:selectOneMenu id="countries" value="#{countryBean.selectedCountry}" onchange="submit()
valueChangeListener="#{countryBean.changeCountry}">
<f:selectItems value="#{countryBean.countries }" />
</h:selectOneMenu>
Backing 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"));
}
}
请告诉我实现是否正确。它很好地工作了。 我的问题是:
- 在h:selectOneMenu标签中添加f:valueChangeListener标签的优点是什么?我已经使用了普通属性valueChangeListener="#{countryBean.changeCountry}"。
- 必须使用onchange="submit()这段代码来更改值吗?
- 通过实现ActionListener接口编写自定义侦听器和仅使用UIComponent标记中的属性(action="methodName")之间的区别是什么? 请解释给我听。