I have used IGx89's converter and it is working perfectly for me....

I've made a few slight changes but nothing major... other then that I have 
moved the Store outside the converter.

Oh and I have done some specific stuff for my project to make it easier for me 
but you can get rid of all that.

So for anyone interested:

ObjectConverter.java

  | package gekko.web.converter;
  | 
  | import static org.jboss.seam.ScopeType.CONVERSATION;
  | import gekko.util.StringUtils;
  | 
  | import javax.faces.component.UIComponent;
  | import javax.faces.context.FacesContext;
  | import javax.faces.convert.ConverterException;
  | 
  | import org.jboss.seam.Seam;
  | import org.jboss.seam.annotations.Install;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.annotations.Scope;
  | import org.jboss.seam.annotations.faces.Converter;
  | import org.jboss.seam.annotations.intercept.BypassInterceptors;
  | 
  | @Name("GenericObjectConverter")
  | @Scope(CONVERSATION)
  | @Install(precedence = Install.APPLICATION)
  | @Converter
  | @BypassInterceptors
  | public class ObjectConverter implements javax.faces.convert.Converter {
  | 
  |     @Override
  |     public Object getAsObject(FacesContext context, UIComponent component,
  |                     String value) throws ConverterException {
  |             
  |             if (value == null) {
  |                     return null;
  |             }
  |             return ObjectConverterStore.instance().get(value);
  |     }
  | 
  |     @Override
  |     public String getAsString(FacesContext context, UIComponent component,
  |                     Object value) throws ConverterException {
  | 
  |             if (value == null) {
  |                     return null;
  |             }
  |             
  |             String key = ObjectConverterStore.instance().contains(value);
  |             if (!StringUtils.isBlank(key)) { 
  |                     return key;
  |             }
  |             
  |             
if(context.getApplication().getStateManager().isSavingStateInClient(context)
  |                             && Seam.isEntityClass(value.getClass())) {
  |                     throw new ConverterException("ObjectConverter is unable 
to handle entity classes when client-side " +
  |                                     "state saving is enabled. Please use 
EntityConverter instead, or enable server-side state saving");
  |             }
  | 
  |             return ObjectConverterStore.instance().put(value);
  | 
  |     }
  | 
  | }
  | 

and

ObjectConverterStore.java

  | package gekko.web.converter;
  | 
  | import static org.jboss.seam.ScopeType.PAGE;
  | import static org.jboss.seam.annotations.Install.APPLICATION;
  | 
  | import gekko.domain.AbstractEntityId;
  | import gekko.domain.PersistentEntity;
  | 
  | import java.rmi.server.UID;
  | import java.util.HashMap;
  | import java.util.Map;
  | 
  | import org.jboss.seam.Component;
  | import org.jboss.seam.annotations.Install;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.annotations.Scope;
  | import org.jboss.seam.contexts.Contexts;
  | 
  | @Name("ObjectConverterStore")
  | @Install(precedence = APPLICATION)
  | @Scope(PAGE)
  | public class ObjectConverterStore {
  | 
  |     private final Map<String, Object> objects = new HashMap<String, 
Object>();
  | 
  |     // Add an object to the store
  |     public String put(Object entity) {
  |             String key;
  |             if (entity instanceof PersistentEntity) {
  |                     //If this is a compound key then we need to use 
something else
  |                     if (((PersistentEntity)entity).getId() instanceof 
AbstractEntityId) {
  |                             key = 
Integer.toString(((PersistentEntity)entity).getId().hashCode());
  |                     } else {
  |                             key = 
((PersistentEntity)entity).getId().toString();
  |                     }
  |                     
  |             } else {
  |                     key = new UID().toString();
  |             }
  |             objects.put(key, entity);
  |             return key;
  |     }
  | 
  |     // Get an object from the store
  |     public Object get(String key) {
  |             return objects.get(key);
  |     }
  |     
  |     // Check if store contains the object already.
  |     public String contains(Object object) {
  |             for (Map.Entry<String, Object> entry : objects.entrySet()) {
  |                     if (entry.getValue().equals(object)) {
  |                             return entry.getKey();
  |                     }
  |             }
  |             return null;
  |     }
  | 
  |     
  |     public static ObjectConverterStore instance() {
  |             if (!Contexts.isPageContextActive()) {
  |                     throw new IllegalArgumentException("Page scope not 
active");
  |             }
  |             return (ObjectConverterStore) Component
  |                             .getInstance(ObjectConverterStore.class);
  |     }
  | }
  | 

If you have a look at ObjectConverterStore where i have

  | if (entity instanceof PersistentEntity) {
  |     //If this is a compound key then we need to use something else
  |     if (((PersistentEntity)entity).getId() instanceof AbstractEntityId) {
  |         key = 
Integer.toString(((PersistentEntity)entity).getId().hashCode());
  |     } else {
  |         key = ((PersistentEntity)entity).getId().toString();
  |     }
  |                     
  | } else {
  |     key = new UID().toString();
  | }
  | 

You could just use the line

  | key = new UID().toString();
  | 

I've only done it that way to make some of my keys a little more meaningful... 
and so that I can match objects to ones that are inside my list based on id.

At least this is a working example that people can get some ideas off anyway. :)

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

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

Reply via email to