Marka ve model seçimi için iki tane selectOneMenu komponentim var. Marka değiştiğinde ajax ile model komponenti güncellenecek. Bu durumda brandChanged metodu hiç tetiklenmemektedir. Daha önceki denemelerimde tetiklenmesine rağmen brand değişkeni null olarak set ediliyordu. Sorun neden kaynaklanıyor olabilir? Şimdiden ilgilenen arkadaşlara teşekkürler.
Brand.java
public class Brand { private int id; private String name; public Brand(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }**Model.java**
public class Model { private int id; private String name;CarBean.javapublic Model(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }
}
@ManagedBean(name = "carbean") @ViewScoped public class CarBean implements Serializable { private Brand brand; private Model model; private List<brand> brandList = new ArrayList<brand>(); private List<model> modelList = new ArrayList<model>(); @PostConstruct public void init() { System.out.println("PostConstruct"); brandList.add(new Brand(1, "Audi")); brandList.add(new Brand(2, "Opel")); modelList.add(new Model(1, "A1")); modelList.add(new Model(2, "A3")); } public void brandChanged(AjaxBehaviorEvent event) { System.out.println("brandChanged"); modelList.clear(); if (brand.getId() == 1) { modelList.add(new Model(1, "A1")); modelList.add(new Model(2, "A3")); } else if (brand.getId() == 2) { modelList.add(new Model(1, "Astra")); modelList.add(new Model(2, "Corsa")); } } public Brand getBrand() { return brand; } public void setBrand(Brand brand) { this.brand = brand; } public Model getModel() { return model; } public void setModel(Model model) { this.model = model; } public List<brand> getBrandList() { return brandList; } public void setBrandList(List<brand> brandList) { this.brandList = brandList; } public List<model> getModelList() { return modelList; } public void setModelList(List<model> modelList) { this.modelList = modelList; } }
home.xhtml
<h:form>
<h:selectOneMenu id="brandid" value="#{carbean.brand}">
<f:selectItems value="#{carbean.brandList}" var="brand" itemValue="#{brand.id}" itemLabel="#{brand.name}" />
<f:ajax event="change" listener="#{carbean.brandChanged}" execute="@this" render="modelid" />
</h:selectOneMenu>
<h:selectOneMenu id="modelid" value="#{carbean.model}">
<f:selectItems value="#{carbean.modelList}" var="model" itemValue="#{model.id}" itemLabel="#{model.name}" />
</h:selectOneMenu></h:form>