Cannot convert 4/23/12 12:00 AM of type java.util.Date to class java.sql.Date

I am moving my project from WebSphere 7 to WebSphere 8, and I am using JSF 1.2.

I am having a problem with the IBM JSF / html_extended tags, as well as standard converters, which are mainly the core components of JSF 1.2. I am also updating Java EE from 5 to 6 (which may not be the reason). Finally, there is also a component tree.

Below is my stack trace:

javax.faces.component.UpdateModelException: org.apache.jasper.el.JspELException: /sc40/NewContract.jsp(130.5) '# {pc_NewContract.overrideAsOfDtSQL}' Cannot convert 4/23/12 12:00 AM of type class java.util.Date to class java.sql.Date
    at javax.faces.component.UIInput.updateModel (UIInput.javahaps98)
    at javax.faces.component.UIInput.processUpdates (UIInput.java:299)
    at javax.faces.component.UIForm.processUpdates (UIForm.java:187)
    at javax.faces.component.UIComponentBase.processUpdates (UIComponentBase.java:1258)
    at javax.faces.component.UIComponentBase.processUpdates (UIComponentBase.java:1258)
    at javax.faces.component.UIViewRoot._processUpdatesDefault (UIViewRoot.java:1321)
    at javax.faces.component.UIViewRoot.access $ 600 (UIViewRoot.java:75)
    at javax.faces.component.UIViewRoot $ UpdateModelPhaseProcessor.process (UIViewRoot.java:1423)
    at javax.faces.component.UIViewRoot._process (UIViewRoot.java:1282)
    at javax.faces.component.UIViewRoot.processUpdates (UIViewRoot.java:765)
    at org.apache.myfaces.lifecycle.UpdateModelValuesExecutor.execute (UpdateModelValuesExecutor.java:34)
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase (LifecycleImpl.java:171)
    at org.apache.myfaces.lifecycle.LifecycleImpl.execute (LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service (FacesServlet.java:189)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service (ServletWrapper.java:1147)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:722)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:449)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest (ServletWrapperImpl.java:178)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters (WebAppFilterManager.java:1020)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest (WebApp.java:3639)
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest (WebGroup.java:304)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest (WebContainer.java:950)
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest (WSWebContainer.java:1659)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready (WCChannelLink.java:195)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination (HttpInboundLink.java:452)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest (HttpInboundLink.java∗11)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest (HttpInboundLink.java:305)
    at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete (HttpICLReadCallback.java:83)
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted (AioReadCompletionListener.java:165)
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback (AbstractAsyncFuture.java:217)
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions (AsyncChannelFuture.java:161)
    at com.ibm.io.async.AsyncFuture.completed (AsyncFuture.java:138)
    at com.ibm.io.async.ResultHandler.complete (ResultHandler.java:204)
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop (ResultHandler.java:816)
    at com.ibm.io.async.ResultHandler $ 2.run (ResultHandler.java:905)
    at com.ibm.ws.util.ThreadPool $ Worker.run (ThreadPool.java:1648)
Caused by: org.apache.jasper.el.JspELException: /sc40/NewContract.jsp(130.5) '# {pc_NewContract.overrideAsOfDtSQL}' Cannot convert 4/23/12 12:00 AM of type class java.util. Date to class java.sql.Date
    at org.apache.jasper.el.JspValueExpression.setValue (JspValueExpression.java:98)
    at javax.faces.component.UIInput.updateModel (UIInput.javahaps80)
    ... 35 more

+3
source share
2 answers

Restore property <<20> as java.util.Dateinstead java.sql.Date. You should not use specific JDBC data types in the model at all. Note that this java.sql.Dateis a subclass java.util.Date, so you do not need to convert it at all when matching the database with the model in the DAO.

+6
source

There is a workaround without changing the sleep model. I prefer this way because all changes are in the jsf layer.

You can use binding in a composite component. The following code is an example with rich: calendar (which uses java.util.Date)

...   < cc: interface componentType = "CalendarComponent" >

...   </.: >

&lt;cc:implementation&gt;

...   < rich: calendar value = "# {cc.attrs.value}" binding = "# {cc.attrs.calendar}" / >

...
  & ;/.: >

...

CalendarComponent:

import java.util.Date;

import javax.faces.component.FacesComponent;
import javax.faces.component.UINamingContainer;
import javax.faces.context.FacesContext;

import org.richfaces.component.UICalendar;

@FacesComponent(value = "CalendarComponent")
public class CalendarComponent extends UINamingContainer {

@Override
public void processUpdates(FacesContext context) {

Object o = calendar.getValue();
   if (o instanceof Date) {
  Date d = (Date) o;
                    //this ensures type changing  
        calendar.setValue(new java.sql.Date(d.getTime()));
}
    super.processUpdates(context);
}

private UICalendar calendar;

public UICalendar getCalendar() {
    return calendar;
}

public void setCalendar(UICalendar calendar) {
    this.calendar = calendar;
}

}
0

All Articles