jsf - SelectManyBox - Enum Not saving -


i still have problem selectmanycheckbox..

selectmanycheckbox:

 <p:selectmanycheckbox converter="genericenumconverter" value="#{aview.newobject.avalue}">                                                    <f:selectitems value="#{enumbean.avaluevalues}" var="s" itemvalue="#{s}" itemlabel = "#{s.name}"/>  </p:selectmanycheckbox>  

converter selectmanycheckbox same described here: use enum in h:selectmanycheckbox

@facesconverter("genericenumconverter") public class genericenumconverter implements converter {      private static final string attribute_enum_type = "genericenumconverter.enumtype";      @override     public string getasstring(facescontext context, uicomponent component, object value) {         system.out.println("getasstring 1: ");         if (value instanceof enum) {             system.out.println("getasstring 2: ");             component.getattributes().put(attribute_enum_type, value.getclass());             system.out.println("getasstring 3: ");             return ((enum<?>) value).name();         } else {             system.out.println("getasstring 4: ");             throw new converterexception(new facesmessage("value not enum: " + value.getclass()));         }             }      @override     @suppresswarnings({"rawtypes", "unchecked"})     public object getasobject(facescontext context, uicomponent component, string value) {         system.out.println("getasobject 1: ");         class<enum> enumtype = (class<enum>) component.getattributes().get(attribute_enum_type);         system.out.println("getasobject 2: ");         try {             system.out.println("getasobject 3: ");             return enum.valueof(enumtype, value);         } catch (illegalargumentexception e) {             system.out.println("getasobject 4: ");             throw new converterexception(new facesmessage("value not enum of type: " + enumtype));         }     } 

the enum is:

public enum avalue {          1value,         2value,         3value,         4value;         private final string name;          private avalue() {             system.out.println("avalue 1");             this.name = null;             system.out.println("avalue 2");         }          public string getname() {             system.out.println("getname 1 " + name());             return resourcebundleutil.getlabelfromrb("avalue." + name());         }     }      public avalue[] getavaluevalues() {         return avalue.values();     } 

tomcat logs are:

avalue 1 avalue 2 avalue 1 avalue 2 avalue 1 avalue 2 avalue 1 avalue 2 avalue 1 avalue 2 avalue 1 avalue 2 avalue 1 avalue 2 avalue 1 avalue 2 avalue 1 avalue 2 getname 1value getname 2value getname 3value getname 4value getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getname 1value getname 2value getname 3value getname 4value getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  getasstring 1:  getasstring 2:  getasstring 3:  

when press save button, nothing happens , nothing saved database. looks not going getasobject method. don't know why. when change component selectonemenu there no problem. selectmanycheckbox thing not working. have idea?

your problem here:

<p:selectmanycheckbox ... value="#{aview.newobject.avalue}"> 

you're binding value attribute of input component can get/set multiple values property represents single value. isn't going work. need bind value attribute collection (e.g. list<avalue>) or array (e.g. avalue[]) property instead of single property avalue.

for example:

public class newobject {      private list<avalue> avalues;      // ... } 

with

<p:selectmanycheckbox ... value="#{aview.newobject.avalues}"> 

or, alternatively:

public class newobject {      private avalue[] avalues;      // ... } 

with

<p:selectmanycheckbox value="#{aview.newobject.avalues}"> 

note when use arrays, whole converter not needed. see omnifaces.genericenumconverter showcase page.


unrelated concrete problem, according java naming conventions, enum class names should start uppercase, regular classes , interfaces, avalue enum class name bad choice. hungarian notations discouraged in java, way.


update: prove working, here's sscce.

the enum:

public enum value {      one, two, three;      public string getname() {         return name().tolowercase();     }  } 

the entity:

public class entity {      private value[] values;      public value[] getvalues() {         return values;     }      public void setvalues(value[] values) {         this.values = values;     }  } 

the managed bean:

@managedbean @requestscoped // note: @viewscoped works on sscce. public class bean {      private entity entity;      @postconstruct     public void init() {         entity = new entity();     }      public void submit() {         system.out.println(arrays.tostring(entity.getvalues()));     }      public entity getentity() {         return entity;     }      public value[] getavailablevalues() {         return value.values();     }  } 

the view (without converter!):

<h:form>     <p:selectmanycheckbox value="#{bean.entity.values}">         <f:selectitems value="#{bean.availablevalues}" var="value"             itemvalue="#{value}" itemlabel="#{value.name}" />     </p:selectmanycheckbox>      <p:commandbutton value="submit" action="#{bean.submit}" />  </h:form> 

it works fine me (mojarra 2.1.28 + primefaces 4.0, should work on older versions construct isn't known have bugs).


Comments

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -