Ok, I've tried using IGx89's converter but moving the store outside of the 
converter. And it *almost* works!

I'm running into a small problem though.

My code is as follows:

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.Create;
  | 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 {
  | 
  |     private ObjectConverterStore objectStore;
  | 
  |     @Create
  |     public void create() {
  |             objectStore = ObjectConverterStore.instance();
  |     }
  | 
  |     @Override
  |     public Object getAsObject(FacesContext context, UIComponent component,
  |                     String value) throws ConverterException {
  |             
  |             if (value == null) {
  |                     return null;
  |             }
  |             return objectStore.get(value);
  |     }
  | 
  |     @Override
  |     public String getAsString(FacesContext context, UIComponent component,
  |                     Object value) throws ConverterException {
  | 
  |             if (value == null) {
  |                     return null;
  |             }
  |             
  |             String key = objectStore.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 objectStore.put(value).toString();
  | 
  |     }
  | 
  | }
  | 

ObjectConverterStore.java 
  | package gekko.web.converter;
  | 
  | import static org.jboss.seam.ScopeType.PAGE;
  | import static org.jboss.seam.annotations.Install.APPLICATION;
  | 
  | 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 Map<String, Object> objects = new HashMap<String, Object>();
  | 
  |     // Add an object to the store
  |     public String put(Object entity) {
  |             String 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() == object) {
  |                             entry.getKey();
  |                     }
  |             }
  |             return null;
  |     }
  | 
  |     
  |     public static ObjectConverterStore instance() {
  |             if (!Contexts.isPageContextActive()) {
  |                     throw new IllegalArgumentException("Page scope not 
active");
  |             }
  |             return (ObjectConverterStore) Component
  |                             .getInstance(ObjectConverterStore.class);
  |     }
  | }
  | 

And finally my faces-config.xml

  | <?xml version="1.0" encoding="UTF-8"?>
  | <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee";
  |     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  |     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd";>
  | 
  |     <!-- Facelets support -->
  |     <application>
  |             <variable-resolver>
  |                     org.springframework.web.jsf.DelegatingVariableResolver
  |             </variable-resolver>
  |             <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
  |             <message-bundle>messages</message-bundle>
  |     </application>
  | 
  |     <!-- The gekko project's Date Converter -->
  |     <converter>
  |             <converter-id>gekkoDateConverter</converter-id>
  |             <converter-class>
  |                     gekko.web.converter.DateConverter
  |             </converter-class>
  |     </converter>
  |     
  |     <!-- The gekko project's Persistent Entity Converter: Only to be used 
with the h:selectMenus -->
  |     <converter>
  |             
<converter-id>SelectItemsPersistentEntityConverter</converter-id>
  |             <converter-class>
  |                     gekko.web.converter.SelectItemsPersistentEntityConverter
  |             </converter-class>
  |     </converter>
  |     
  |     <!-- The generic object converter -->
  |     <converter>
  |             <converter-id>GenericObjectConverter</converter-id>
  |             <converter-class>
  |                     gekko.web.converter.ObjectConverter
  |             </converter-class>
  |     </converter>
  |     
  |     <!-- This is the gekko:defaultAction tag to use for when a user presses 
the enter key to submit a form -->
  |     <component>
  |             <component-type>gekko.web.defaultAction</component-type>
  |             <component-class>
  |                     gekko.web.components.UIDefaultAction
  |             </component-class>
  |     </component>
  | 
  | </faces-config>
  | 


OK, now for the problem.

The converter works fine when it comes to the getAsString method, everything 
does exactly what it should do.

But when I do the getAsObject my objectStore variable is null!????!!??

Can someone please tell me why?
I have tried to copy the entityManagerStore but I must be missing something!

I'll keep looking into it but... so far I've not made any progress, changing 
scopes does not help either.

Thanks for any input!

Just in case the stack trace is as follows:

  | WARNING: executePhase(PROCESS_VALIDATIONS 3,[EMAIL PROTECTED]) threw 
exception
  | javax.faces.FacesException
  |     at 
com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:108)
  |     at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
  |     at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
  |     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
  |     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  |     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  |     at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:307)
  |     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  |     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  |     at 
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
  |     at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
  |     at 
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  |     at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
  |     at 
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  |     at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:44)
  |     at 
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  |     at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
  |     at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
  |     at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
  |     at 
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  |     at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
  |     at 
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  |     at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:150)
  |     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  |     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  |     at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  |     at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
  |     at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
  |     at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  |     at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  |     at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
  |     at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
  |     at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
  |     at 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
  |     at java.lang.Thread.run(Thread.java:619)
  | Caused by: java.lang.NullPointerException
  |     at 
gekko.web.converter.ObjectConverter.getAsObject(ObjectConverter.java:39)
  |     at 
org.jboss.seam.ui.converter.PrioritizableConverter.getAsObject(PrioritizableConverter.java:61)
  |     at 
org.jboss.seam.ui.converter.ConverterChain.getAsObject(ConverterChain.java:107)
  |     at 
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:152)
  |     at 
com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(MenuRenderer.java:197)
  |     at 
com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:359)
  |     at javax.faces.component.UIInput.getConvertedValue(UIInput.java:934)
  |     at javax.faces.component.UIInput.validate(UIInput.java:860)
  |     at javax.faces.component.UIInput.executeValidate(UIInput.java:1065)
  |     at javax.faces.component.UIInput.processValidators(UIInput.java:666)
  |     at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033)
  |     at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033)
  |     at javax.faces.component.UIForm.processValidators(UIForm.java:229)
  |     at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033)
  |     at 
javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:662)
  |     at org.ajax4jsf.component.AjaxViewRoot.access$201(AjaxViewRoot.java:57)
  |     at 
org.ajax4jsf.component.AjaxViewRoot$3.invokeRoot(AjaxViewRoot.java:319)
  |     at 
org.ajax4jsf.context.JsfOneOneInvoker.invokeOnRegionOrRoot(JsfOneOneInvoker.java:56)
  |     at 
org.ajax4jsf.context.AjaxContextImpl.invokeOnRegionOrRoot(AjaxContextImpl.java:173)
  |     at 
org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:333)
  |     at 
com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)
  |     ... 34 more
  | 

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

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

Reply via email to