[jboss-user] [JBoss Seam] - Enum Internationalised

tony.herstell@gmail.com do-not-reply at jboss.com
Sat May 26 06:27:53 EDT 2007


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



More information about the jboss-user mailing list