This is probably obvious to all of you, but taken me days to get this working 
(and still not sure how!).

Inside an Entity I have an internationalised enum (as I am hoping to persist a 
value of its kind with the Entity):

  | @SuppressWarnings("serial")
  | @Entity // Defines this as an Entity that is a class mapped toDate the 
Datastore.
  | @Name("booking") // Name used within SEAM for an instance of this class.
  | public class Booking implements Serializable {
  | 
  |     public enum OrganisationKind {
  |         PRIVATE_BOOKING ("booking_private"),
  |         PRIVATE_BOOKING_OPEN ("booking_private_open"),
  |         NON_PROFIT_ORG ("booking_non_profit_org"),
  |         COMMERCIAL ("booking_commercial_org"),
  |         OPEN_EVENT ("booking_open_event"); // Only booked by Selwyn 
Equestrian Staff
  |         private final String inlLabel;
  |         OrganisationKind(String inlLabel) {
  |             this.inlLabel = inlLabel;
  |         }
  |         public String getInlLabel() { return inlLabel; }
  |     }
  | 
  | ...
  |     private OrganisationKind organisationKind;
  | ...
  | 


I have a controller that requires this enum to be displayed as 
selectOneRadio... these routines handle the selection:

  |     public Map getOrganisationKindList();
  | 
  |     public Booking.OrganisationKind getSelectedOrganisationKind();
  |     
  |     public void setSelectedOrganisationKind(Booking.OrganisationKind 
orgKind); not use I need this one as the Change fires ok
  | 
  |     public void selectedOrganisationKindChanged(ValueChangeEvent event);
  | 

The Impl:

  | ...
  |     /**
  |      * The currently selected Booking Type
  |      */
  |     private Booking.OrganisationKind selectedOrganisationKind;
  | 
  | ...
  | 
  |     public Map getOrganisationKindList() {
  |             Map<String,Booking.OrganisationKind> choices = new 
HashMap<String,Booking.OrganisationKind>();
  |             for (Booking.OrganisationKind type : 
Booking.OrganisationKind.values()) {
  |                     choices.put(messages.get(type.getInlLabel()), type);
  |             }
  |             return choices;
  |     }
  | 
  |     public Booking.OrganisationKind getSelectedOrganisationKind() {
  |             return selectedOrganisationKind;
  |     }
  |     
  |     public void setSelectedOrganisationKind(Booking.OrganisationKind 
orgKind) {
  |             this.selectedOrganisationKind = orgKind;
  |     }
  |     
  |     public void selectedOrganisationKindChanged(ValueChangeEvent event) {
  |         if (event.getNewValue() != null) {
  |             Booking.OrganisationKind theOrganisationKind = 
Booking.OrganisationKind.valueOf(event.getNewValue().toString());
  |             selectedOrganisationKind = theOrganisationKind;
  |         } else {
  |             log.error("null new event passed in. Error!");
  |         }
  |     }
  | 
  | 


The screen shows all this using:

  | <ice:panelGrid columns="1" styleClass="center">
  |     <ice:selectOneRadio 
  |                 value="#{availabilityController.selectedOrganisationKind}"
  |                 
valueChangeListener="#{availabilityController.selectedOrganisationKindChanged}"
  |                 partialSubmit="true"
  |                 layout="pageDirection"
  |                 converter="#{enumTypeConverter}">
  |            <f:selectItems 
value="#{availabilityController.organisationKindList}"/>
  |          </ice:selectOneRadio>
  | </ice:panelGrid>
  | 


Now... I have to provide a Converter (no idea if this is right.. and the screen 
seems to find this without outjecting it to the view at all!!):

  | @Intercept(InterceptionType.NEVER)
  | @SuppressWarnings("serial")
  | @Stateless // A new component is created or re-initialised and re-used each 
time it is called.
  | @Name("enumTypeConverter") // Name used within SEAM for an instance of this 
class.
  | // All stateless session beans belong to the Stateless Context Scope
  | public class EnumTypeConverterImpl implements EnumTypeConverter {
  | 
  |     @SuppressWarnings("unchecked")
  |     public Object getAsObject(FacesContext context, UIComponent comp, 
String value) throws ConverterException {
  |             Class enumType = comp.getValueBinding("value").getType(context);
  |             return Enum.valueOf(enumType, value);
  |     }
  | 
  |     public String getAsString(FacesContext context, UIComponent component, 
Object object) throws ConverterException {
  |             if (object == null) {
  |                     return null;
  |             }
  |             Enum type = (Enum) object;
  |             return type.toString();
  |     }
  | 
  | }
  | 

Anyhow, it may help some poor sap in the future!

FINALLY GOT TO USE INTERNATIONALISED ENUMS!!!


>From the screen:

  | O open booking (Selwyn Equestrian Centre staff only)
  | O commercial booking (e.g. NZ Elite Horse Auctions Ltd.)
  | O private booking but open to anyone (cost is per horse - max of 4 places)
  | O non profit booking (Dressage Canterbury etc.)
  | O private booking (cost is for Arena)  <<---Selected
  | 
  | 
  | Result (on screen and in controller) = PRIVATE_BOOKING
  | 

:)

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4048838#4048838

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4048838
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to