here selectonemenu
<h:selectonemenu value="#{bean.myobject}" > <f:ajax render="componenttorender" listener="#{bean.onselect}"/> <f:converter converterid="myobjectconverter" /> <f:selectitem itemlabel="none" itemvalue="#{null}" /> <f:selectitems value="#{bean.objects}" var="object" itemvalue="#{object}" itemlabel="#{object.name}" /> </h:selectonemenu> and converter
@facesconverter("myobjectconverter") public class myobjectconverter implements converter{ private list<myobject> objects; public myobjectconverter(){ this.objects = mycontroller.getallmyobjects(); } public object getasobject(facescontext context, uicomponent component, string value) { if(!stringutils.isinteger(value)) { return null; } return this.getmyobject(value); } public string getasstring(facescontext context, uicomponent component, object value) { if(value == null) { return null; } return string.valueof(((myobject) value).getid()).tostring(); } public myobject getmyobject(string id) { iterator<myobject > iterator = this.objects.iterator(); while(iterator.hasnext()) { myobject object = iterator.next(); if(object.getid() == integer.valueof(id).intvalue()) { return object; } } return null; } } the problem ajax listener never called , component never rendered. there wrong converter or selectonemenu? follow example , can't figure mistake out.
btw : simple method in bean
public void onselect() { system.out.println(this.myobject); if(this.myobject != null) { system.out.println(this.myobject.getname()); } } i had problem , changed selected value object id. here want make work objects because know it's possible.
thanks
i have solution. had override "equals" method in myobject class!
thanks.
edit: code
@override public boolean equals(object obj) { if(this.id == ((myobject) obj).id) { return true; }else { return false; } }
Comments
Post a Comment