4 Mayıs 2012 Cuma

Dinamik Listener Metodu Eklemece

JSF ile Bean tarafından mevcut komponentleri dinamik oluşturma ve bunlara listener eklemek için kullanılan yol şu şekildedir.Dinamik üreteceğimiz komponent Combobox.

{
ExpressionFactory factory = FacesContext.getCurrentInstance().getApplication().getExpressionFactory();

HtmlSelectOneMenu myCombobox = new HtmlSelectOneMenu();
// Combobox liste değerleri
UISelectItems comboSelectItems = new UISelectItems();
comboSelectItems.setValue(ttsExternalGatewayComboList);
myCombobox.getChildren().add(new UISelectItem());
myCombobox.getChildren().add(comboSelectItems);
// Combobox rendered attribute değeri
myCombobox.setValueExpression("rendered", factory.createValueExpression(FacesContext.getCurrentInstance().getELContext(), "#{myBean.myRenderFlag ? true : false}", String.class));
// Combobox Ajax Ayarının Verilmesi
AjaxBehavior myComboboxAjax = new AjaxBehavior();
myComboboxAjax.setExecute(Arrays.asList(new String[]{ "@this" }));
myComboboxAjax.setRender(Arrays.asList(new String[] { "form:myPanelGrid" }));
myCombobox.addClientBehavior("change", myComboboxAjax);
// Combobox listener metodunun atanması
MethodExpression myComboboxMethodExpression= factory.createMethodExpression(FacesContext.getCurrentInstance().getELContext(),"#{myBean.comboboxValueChangeMethod}", null, new Class[]{ValueChangeEvent.class});
myCombobox.addValueChangeListener(new MethodExpressionValueChangeListener(myComboboxMethodExpression));
}