Until you run into bizarre errors with no obvious explanation, such as the following error:
Conversion Error setting value 'value1 value2 value3' for '#{myMultiselectPicklistValue}'.
This error comes from trying to save the selections from an
Multi-select picklist values are stored as
Basically, to spell it out for myself and for others, here's what we have to do as developers working around this problem.
What we want to write is:
Instead, what we have to write is:
Note the plural name of the custom getter and setter methods. Cheers, indeed.
apex:selectCheckboxes
component into a multi-select picklist field. You would think that it's as easy as simply specifying {!property} for the value attribute of the apex:selectCheckboxes
component. But, no, it's not.Multi-select picklist values are stored as
String
values, with each option delimited with a semicolon. This is great to know, but what happens with apex:selectCheckboxes
? apex:selectCheckboxes
expects a List<String>
! This discussion board post hints at the annoyance awaiting developers: "Checkboxes not saving".Basically, to spell it out for myself and for others, here's what we have to do as developers working around this problem.
What we want to write is:
<apex:selectcheckboxes value="{!mPicklistValue}">
... and in the controller ...
public String mPicklistValue { get; set; }
Instead, what we have to write is:
<apex:selectcheckboxes value="{!mPicklistValues}">
... and in the overblown controller ...private String mPicklistValue; public List<String> getMPicklistValues() { List<String> values = null; // Convert mPicklistValue into List of // String values if (mPicklistValue != null) values = mPicklistValue.split(';'); return values; } // List<String> getMPicklistValues() public void setMPicklistValues( List<String> values) { // Convert values into a semilcolon-delimited // String value if (values == null) { mPicklistValue = null; } else { mPicklistValue = ''; for (String value : values) { mPicklistValue += value + ';'; } } } // void setMPicklistValues(List<String>)
Note the plural name of the custom getter and setter methods. Cheers, indeed.