5

プロジェクトを WebSphere 7 から WebSphere 8 に移行しており、JSF 1.2 を使用しています。

IBM JSF/html_extended タグと、主に JSF 1.2 コア コンポーネントである標準コンバーターの問題に直面していました。また、Java EE バージョンを 5 から 6 に更新しています (これが理由ではない可能性があります)。最後に、コンポーネント ツリーも指定されています。

以下は私のスタックトレースです:

javax.faces.component.UpdateModelException: org.apache.jasper.el.JspELException: /sc40/NewContract.jsp(130,5) '#{pc_NewContract.overrideAsOfDtSQL}' 型の 4/23/12 12:00 AM を変換できませんクラス java.util.Date からクラス java.sql.Date へ
    javax.faces.component.UIInput.updateModel(UIInput.java:398)で
    javax.faces.component.UIInput.processUpdates(UIInput.java:299)で
    javax.faces.component.UIForm.processUpdates(UIForm.java:187)で
    javax.faces.component.UIComponentBase.processUpdates (UIComponentBase.java:1258) で
    javax.faces.component.UIComponentBase.processUpdates (UIComponentBase.java:1258) で
    javax.faces.component.UIViewRoot._processUpdatesDefault(UIViewRoot.java:1321)で
    javax.faces.component.UIViewRoot.access$600 (UIViewRoot.java:75) で
    javax.faces.component.UIViewRoot$UpdateModelPhaseProcessor.process(UIViewRoot.java:1423) で
    javax.faces.component.UIViewRoot._process(UIViewRoot.java:1282) で
    javax.faces.component.UIViewRoot.processUpdates (UIViewRoot.java:765) で
    org.apache.myfaces.lifecycle.UpdateModelValuesExecutor.execute (UpdateModelValuesExecutor.java:34) で
    org.apache.myfaces.lifecycle.LifecycleImpl.executePhase (LifecycleImpl.java:171) で
    org.apache.myfaces.lifecycle.LifecycleImpl.execute (LifecycleImpl.java:118) で
    javax.faces.webapp.FacesServlet.service (FacesServlet.java:189) で
    com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1147) で
    com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:722) で
    com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:449) で
    com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) で
    com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1020)
    com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3639) で
    com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304) で
    com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:950) で
    com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1659) で
    com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195) で
    com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
    com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511) で
    com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305) で
    com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83) で
    com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) で
    com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) で
    com.ibm.io.async.AsyncChannelFuture.fireCompletionActions (AsyncChannelFuture.java:161) で
    com.ibm.io.async.AsyncFuture.completed (AsyncFuture.java:138) で
    com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) で
    com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:816) で
    com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) で
    com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1648) で
原因: org.apache.jasper.el.JspELException: /sc40/NewContract.jsp(130,5) '#{pc_NewContract.overrideAsOfDtSQL}' 型クラス java.util の 4/23/12 12:00 AM を変換できません。クラス java.sql.Date への日付
    org.apache.jasper.el.JspValueExpression.setValue (JspValueExpression.java:98) で
    javax.faces.component.UIInput.updateModel(UIInput.java:380)で
    ... 35以上

4

2 に答える 2

8

'#{pc_NewContract.overrideAsOfDtSQL}' 型クラス java.util.Date の 4/23/12 12:00 AM をクラス java.sql.Date に変換できません

あなたはどうやら

private java.sql.Date overrideAsOfDtSQL;

これは正しくありません。java.sql.*タイプはモデルに属しません。で置き換えますjava.util.Date

private java.util.Date overrideAsOfDtSQL;

を使用している場合も同じ答えが当てはまりますjava.sql.Time

java.sql.Datejava.sql.Timeは のサブクラスであることに注意してください。そのjava.util.Dateため、 を使用してオブジェクトから文字列に変換するときに機能しました<f:convertDateTime><f:convertDateTime>は常に に変換されるため、文字列からオブジェクトへの変換のみは機能しませんjava.util.Date

于 2012-05-02T16:56:15.387 に答える
0

休止状態のモデルを変更しない回避策があります。すべての変更がjsfレイヤーにあるため、私はこの方法を好みます。

複合コンポーネントでバインディングを使用できます。次のコードは、rich:calendar (java.util.Date を使用) を使用した例です。

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

... </cc:インターフェース>

&lt;cc:implementation&gt;

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

...
</cc:実装>

...

そして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;
}

}
于 2013-11-01T08:44:22.077 に答える