【问题标题】:Implicit conversion results in argument type mismatch with Tomcat 7 [closed]隐式转换导致参数类型与 Tomcat 7 不匹配 [关闭]
【发布时间】:2012-09-15 17:00:15
【问题描述】:

适用于 tomcat 6。

查看:<h:inputText> 映射到 bean 中的 double。

我看了看,除非我是盲人,否则我们依赖 Tomcat 提供的 EL。

在 Tomcat 7 上运行时会抛出:

严重:javax.faces.FacesException: java.lang.IllegalArgumentException:参数类型不匹配 javax.faces.FacesException:java.lang.IllegalArgumentException: 参数类型不匹配 com.sun.faces.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:142)

引起:javax.faces.component.UpdateModelException: java.lang.IllegalArgumentException:参数类型不匹配 javax.faces.component.UIInput.updateModel(UIInput.java:853) 在 javax.faces.component.UIInput.processUpdates(UIInput.java:735) 在 javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242) 在 javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242) 在 javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242) 在 javax.faces.component.UIForm.processUpdates(UIForm.java:281) 在 javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242) 在 javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242) 在 javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1231) 在 com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78) 在 com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) ... 30 更多

原因:java.lang.IllegalArgumentException:参数类型不匹配 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在 java.lang.reflect.Method.invoke(未知来源)在 dk.bording.inside.util.reflect.Reflection.set(Reflection.java:442) 在 dk.bording.inside.adapter.entity.MapAdapter.invoke(MapAdapter.java:87) 在 dk.bording.inside.adapter.entity.MapAdapter.put(MapAdapter.java:50) 在 javax.el.MapELResolver.setValue(MapELResolver.java:94) 在 com.sun.faces.el.DemuxCompositeELResolver._setValue(DemuxCompositeELResolver.java:255) 在 com.sun.faces.el.DemuxCompositeELResolver.setValue(DemuxCompositeELResolver.java:281) 在 org.apache.el.parser.AstValue.setValue(AstValue.java:207) 在 org.apache.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:257) 在 org.jboss.weld.el.WeldValueExpression.setValue(WeldValueExpression.java:64) 在 com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:131) 在 javax.faces.component.UIInput.updateModel(UIInput.java:818) ... 还有 40 个

有什么建议吗?

【问题讨论】:

    标签: jsf-2 tomcat7 el


    【解决方案1】:

    我怀疑这是由特定字段正在接收的输入引起的。 JSF2 将根据您输入的推断数据类型进行隐式转换。即,如果该字段接收到 0 作为您所谓的 double 唯一字段的输入,它仍会尝试将其转换为 Long。按照thread on the same issue 中的建议,您应该使用<f:convertNumber/> 转换器或将您的字段绑定到java.lang.Number

    【讨论】:

    • 这可能有效,因此我将其标记为已接受。我的错误实际上是挂钩到 JSF 的主要内部框架出现故障。当我注意到它涉及到我应该关闭这个问题但我忘记了。但是您的答案似乎足够广泛,可以保留 imo
    猜你喜欢
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多