Extending f:convertDateTime

Hi!

I use facelets and want to extend f:convertDateTime to understand the String "Now" and converts it to the current Date. All attributes of f:convertDateTime should be also supported.

I tried the following:

faces-config.xml

<converter>

<converter-id>ExtendedDateConverter</converter-id>

<converter-class>com.bla.util.ExtendedDateConverter</converter-class>

</converter>

ExtendedDateConverter.java

public Object getAsObject(final FacesContext context,final UIComponent component,final String value){

String dateValue = value;

if (NOW.equals(value)){

dateValue = getAsString(context, component,new Date());

}

return super.getAsObject(context, component, dateValue);

}

bla.taglib.xml

<facelet-taglib>

<namespace>bla</namespace>

<tag>

<tag-name>testConverter</tag-name>

<converter>

<converter-id>ExtendedDateConverter</converter-id>

</converter>

</tag>

</facelet-taglib>

So far so good. This works fine for attributes which require a String parameter like dateStyle, patter and so on.

<h:inputText value="#{EditProduct.product.activation}" size="25">

<bla:testConverter pattern="dd.MM.yyyy HH:mm:ss" />

</h:inputText>

Works fine, but if i try to add a timeZone which requires java.util.TimeZone i get an exception

<h:inputText id="activation2" value="#{EditProduct.product.activation}" size="25">

<bla:testConverter pattern="dd.MM.yyyy HH:mm:ss" timeZone="Europe/Vienna" />

</h:inputText>

java.lang.NoClassDefFoundError

at com.sun.el.lang.ELSupport.coerceToType(Unknown Source)

at com.sun.el.ExpressionFactoryImpl.coerceToType(Unknown Source)

at com.sun.facelets.tag.BeanPropertyTagRule$LiteralPropertyMetadata.applyMetadata(BeanPropertyTagRule.java:45)

at com.sun.facelets.tag.MetadataImpl.applyMetadata(MetadataImpl.java:36)

at com.sun.facelets.tag.MetaTagHandler.setAttributes(MetaTagHandler.java:62)

at com.sun.facelets.tag.jsf.ConvertHandler.apply(ConvertHandler.java:116)

at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314)

at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169)

at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)

at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314)

at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169)

at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)

at com.sun.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:109)

at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)

at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)

at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)

at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25)

at com.sun.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:95)

at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:503)

at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:546)

at org.ajax4jsf.framework.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)

at org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(AjaxViewHandler.java:233)

at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)

at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)

at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:127)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:277)

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.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:514)

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:868)

at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)

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)

While

<h:outputText value="#{EditProduct.product.activation}">

<f:convertDateTime pattern="dd.MM.yyyy HH:mm:ss" timeZone="Europe/Vienna" />

</h:outputText>

works just fine.

Seems like JSF can't convert a String to a timezone...but how does it work for f:convertDateTime?

Thanks for your help!!

Best wishes

Flo

[6765 byte] By [Flow86a] at [2007-11-27 6:18:13]
# 1

Hello Flow,

I have tried the time zone funcionality on my machine. The code below is running. I use JSF 1.2. Maybe you are using an earlier version!?

<h:outputText value="#{test.date}">

<f:convertDateTime pattern="dd.MM.yyyy HH:mm:ss" timeZone="Europe/Vienna" />

</h:outputText>

public class Word implements Cloneable {

private static final long serialVersionUID = -7995660774401017072;

public Date getDate() { return new Date(); }

}

Output: 04.06.2007 10:53:23 [The date of now :)]

Regards,

Martin

mwinandya at 2007-7-12 17:32:00 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 2
Hi Martin,Thanks for your answer, but the problem is, that the timeZone doesn't work with my tag which extends convertDateTime.Thanks!Regards,Flow
Flow86a at 2007-7-12 17:32:00 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 3
Without using your tag which extends convertDateTime, time zones are working? This would simplify to find the solution.
mwinandya at 2007-7-12 17:32:00 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 4
Sorry but please read my post first.thanksbest regardsflo
Flow86a at 2007-7-12 17:32:00 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 5
Ok, found the solution had to implement PropertyEditors for Locale and TimeZone.If you need additional information contact me...best wishesflo
Flow86a at 2007-7-12 17:32:00 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...