I had a customer requirement to put some CSS formatted labels on some radio buttons in a Visualforce page. The markup was already using an <apex:selectOption> within a <apex:selectRadio>. I didn't want to revert to raw HTML controls as there was a <apex:actionSupport> already in use.
Using the style or styleClass to apply the CSS to the selectOption didn't work as they were deprecated in Salesforce API version 17.0.
Instead I created a property in the controller that returned the required HTML markup and set itemEscaped="false" on the selectOption.
E.g.:
Page:
<apex:selectRadio layout="pageDirection" value="{!controllerflag}" rendered="{!(!addingNew)}">
<apex:actionSupport action="{!getData}" status="addItem" event="onclick" rerender="somePageBlock">
<apex:param name="selectedId" value="{!elementId}"/>
</apex:actionSupport>
<apex:selectOption itemLabel="{!radioSelectLabel}" itemEscaped="false" itemValue="true" >
</apex:selectOption>
</apex:selectRadio>
Controller:
public string radioSelectLabel {
get {
if (hasBeenCancelled) {
return '<span style="color:red;">(Cancelled)</span>';
}
return 'Available';
}
}