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.