Jsf 2 日食警告“;“转换器id未注册”;论定制转换器
我正在使用JSF2和JBossEL(JBoss-EL-2.0.0.GA.jar)。在我希望在xhtml页面中沿着组件显式声明转换器的情况下,我很难让自定义转换器工作。我知道网络上已经有很多这样的例子了,我已经回顾了很多(比如)没有运气的例子,这使得这个问题特别令人沮丧。此外,我还使用Jsf 2 日食警告“;“转换器id未注册”;论定制转换器,jsf-2,converter,Jsf 2,Converter,我正在使用JSF2和JBossEL(JBoss-EL-2.0.0.GA.jar)。在我希望在xhtml页面中沿着组件显式声明转换器的情况下,我很难让自定义转换器工作。我知道网络上已经有很多这样的例子了,我已经回顾了很多(比如)没有运气的例子,这使得这个问题特别令人沮丧。此外,我还使用facescoverter注释的forClass元素实现了一个自定义转换器,它可以正常工作。对于显式声明的转换器,除了使用forClass元素之外,我也用同样的方法进行了处理。相反,我使用的是值元素,或者根本不使用
facescoverter
注释的forClass
元素实现了一个自定义转换器,它可以正常工作。对于显式声明的转换器,除了使用forClass
元素之外,我也用同样的方法进行了处理。相反,我使用的是值
元素,或者根本不使用
我尝试了(似乎)所有注释的组合:使用和不使用值元素,使用简单的类名和完全限定的类名,大写首字母和小写首字母,使用转换器属性和
标记。从我所读到的内容来看,这些事情中的一些不应该以这样或那样的方式产生影响,但我尝试了它们,因为我不知道还能做些什么。Eclipse一直警告我“converter id未注册”。我还是运行了它(因为我看到过Eclipse出现错误的其他情况,但实际上没有),但它抛出了一个NullPointerException
。为什么这不起作用?以下是我的代码的一个版本:
转换器类
XHTML页面
至于你的转换器注册,检查一下:至于NPE,你读了那行的MyFaces源代码了吗?它提示转换器返回了null
。至于Eclipse警告,这是一个完全不同的问题(过时的开发环境)。@BalusC,感谢您的回复。我查看了链接。我已经删除了@ManagedBean
和@ApplicationScoped
注释,并保留了@facescoverter(value=“MyConverter”)
。因此,我发布的代码,converter=“MyConverter”
应该可以工作,对吗?从您的评论中,听起来好像转换器已经被调用了,但是返回了一个空值。我想过时的dev env只是让我感到困惑,让我认为错误就在那里,而没有更好地研究堆栈跟踪。现在我们来检查一下。只需检查IDE中的MyFaces源代码。或者,如果你因为某些不清楚的原因没有,检查一下。唯一能在第213行引起NPE的是nullitemStrValue
。换句话说,Converter#getAsString()
返回null
@BalusC,我检查了MyFaces源代码并查看了我的代码。是的,它看起来像是getAsString
返回了null
,但它应该是因为myBean.myProperty==null
。转换器做的第一件事是if(!(obj instanceof Integer))返回null代码>。由于((obj=null)instanceof Integer)==false
它正确地返回了null
。深入挖掘,我发现如果converter==null
,则renderrutils#getConvertedStringValue
永远不会返回null
。我将转换器更改为if(!(obj instanceof Integer))返回“”代码>和页面现在加载。谢谢你把我推向正确的方向!
@FacesConverter(value = "MyConverter")
@ManagedBean
@ApplicationScoped
public class MyConverter implements Converter {
...
}
<h:selectOneRadio value="#{myBean.myProperty}"
layout="pageDirection"
required="true"
requiredMessage="#{myBean.requiredMessage}"
converter="MyConverter"
id="#{myBean.myPropertyId}" >
<!-- OTHER THINGS I'VE TRIED -->
<!-- <f:converter converterId="MyConverter" /> -->
<!-- <f:converter converterId="myConverter" /> -->
<!-- <f:converter converterId="myPackage.MyConverter" /> -->
<f:selectItems value="#{myBean.myPropertyOptions}" />
</h:selectOneRadio>
javax.faces.FacesException: java.lang.NullPointerException
at org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241)
at org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:258)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:679)
Caused by: java.lang.NullPointerException
at org.apache.myfaces.shared_impl.renderkit.html.HtmlRadioRendererBase.renderGroupOrItemRadio(HtmlRadioRendererBase.java:213)
at org.apache.myfaces.shared_impl.renderkit.html.HtmlRadioRendererBase.encodeEnd(HtmlRadioRendererBase.java:118)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:519)
at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:543)
at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.renderChildren(HtmlGridRendererBase.java:315)
at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.encodeEnd(HtmlGridRendererBase.java:150)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:519)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:618)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:614)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:614)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:614)
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1159)
at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:263)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:85)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
... 13 more