I tried giving an @Name annotation to the Enum, which didn't work. This post on the JBoss forums explained that Enums can't be instantiated and therefore can't be used as a Seam component. I felt sort of dumb for trying that and decided to implement the suggested solution.
I built the piece I was working on from the "stateful" example from Michael Yuan's book, Jboss Seam : Power and Simplicity Beyond Java EE (Amazon link). My form was on "main.xhtml" and was submitting to "ManagerAction" which implemented "Manager" interface. The Enum I wanted for the select was "ServiceTicketStatus."
I added the following to my ManagerAction class,
@Factory("serviceTicketStatuses")
public ServiceTicketStatus[] getServiceTicketStatuses()
{
return ServiceTicketStatus.values();
}
and this to the Manager interface,
public ServiceTicketStatus[] getServiceTicketStatuses();
and this to the form in main.xhtml,
<h:selectOneMenu id="searchStatus" value="#{manager.statusSearch}" >
<f:selectItem itemValue="" itemLabel="Please Select" />
<s:selectItems value="#{serviceTicketStatuses}" var="statuses" />
</h:selectOneMenu>
It worked as advertised.
Blogged with Flock