I wrote a custom component that extends HTMLInputDate and it works
wonderfuly... asides for when I navigate away from the page that it is on.
When I do that I get the following exception:

java.lang.NullPointerException
        at
org.apache.myfaces.custom.date.HtmlInputDate$UserData.isDateSubmitted(HtmlInputDate.java:326)
        at
org.apache.myfaces.custom.date.HtmlInputDate$UserData.isSubmitValid(HtmlInputDate.java:343)
        at
org.apache.myfaces.custom.date.HtmlInputDate$UserData.parse(HtmlInputDate.java:271)
        at
org.apache.myfaces.custom.date.HtmlDateRenderer.getConvertedValue(HtmlDateRenderer.java:356)
        at javax.faces.component.UIInput.getConvertedValue(UIInput.java:395)
        at javax.faces.component.UIInput.validate(UIInput.java:349)
        at javax.faces.component.UIInput.processValidators(UIInput.java:183)
        at
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
        at
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
        at
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
        at
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
        at
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
        at
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
        at 
javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:146)
        at
org.apache.myfaces.lifecycle.LifecycleImpl.processValidations(LifecycleImpl.java:262)
        at
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at
com.loomis.security.filter.SecurityFilter.doFilter(SecurityFilter.java:46)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at
org.apache.myfaces.custom.conversation.ConversationServletFilter.doFilter(ConversationServletFilter.java:52)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at
org.apache.myfaces.custom.requestParameterProvider.RequestParameterServletFilter.doFilter(RequestParameterServletFilter.java:47)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
        at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)


Line 326 of HTMLInputDate:
boolean isDateSubmitted = ! (StringUtils.isEmpty(getDay()) &&
getMonth().equals("-1") && StringUtils.isEmpty(getYear()));

My Renderer:

public class WikiDateRenderer extends HtmlDateRenderer {
        
        @Override
        public void encodeBegin(FacesContext context, UIComponent component) 
throws
IOException {
                WikiDate wikiComponent = (WikiDate) component;  
                WikiRenderer wikiRenderer = 
WikiRenderer.getAppropriateInstance(context,
wikiComponent);
                
                wikiRenderer.encodeBegin();
                
                if (wikiComponent.isWikiEnabled()) {                            
                        super.encodeBegin(context, component);
                }
        }
        
        @Override
        public void encodeEnd(FacesContext context, UIComponent component) 
throws
IOException {
                WikiDate wikiComponent = (WikiDate) component;
                WikiRenderer wikiRenderer = 
WikiRenderer.getAppropriateInstance(context,
wikiComponent);
                
                if (wikiComponent.isWikiEnabled()) {
                        super.encodeEnd(context, component);
                }
                
                wikiRenderer.encodeEnd((new SimpleDateFormat("MMM dd, yyyy"))
                                .format(wikiComponent.getValue()), true);
        }
}


My Component:

public class WikiDate extends HtmlInputDate implements WikiComponent {
        public static final String DEFAULT_RENDERER_TYPE =
"com.loomis.jsf.component.wiki.WikiDateRenderer";
        public static final String COMPONENT_TYPE =
"com.loomis.jsf.component.wiki.WikiDate";

        private Boolean wikiEnabled; 

        public WikiDate() {
                setRendererType(DEFAULT_RENDERER_TYPE);
        }
        
        public Object saveState(FacesContext context) {
                Object[] values = new Object[2];
                
                values[0] = super.saveState(context);
                values[1] = wikiEnabled;
                
                return values;
        }
        
        @Override
        public void restoreState(FacesContext context, Object state) {
                Object values[] = (Object[])state;
                
                super.restoreState(context, values[0]);
                if (values[1] != null) setWikiEnabled((Boolean) values[1]);
        }
        
        public Boolean isWikiEnabled() {
                Object objVal = LSComponentUtil.getValue(this, 
getFacesContext(),
"wikiEnabled", Boolean.TRUE);

                return wikiEnabled != null ? wikiEnabled : (Boolean)objVal;
        }

        public void setWikiEnabled(Boolean wikiEnabled) {
                this.wikiEnabled = wikiEnabled;
        }
}


Thank you! :-)
-- 
View this message in context: 
http://www.nabble.com/HTMLInputDate-throws-exception-when-I-navigate-away-tf2072631.html#a5706316
Sent from the MyFaces - Users forum at Nabble.com.

Reply via email to