Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 日食警告“;“转换器id未注册”;论定制转换器_Jsf 2_Converter - Fatal编程技术网

Jsf 2 日食警告“;“转换器id未注册”;论定制转换器

Jsf 2 日食警告“;“转换器id未注册”;论定制转换器,jsf-2,converter,Jsf 2,Converter,我正在使用JSF2和JBossEL(JBoss-EL-2.0.0.GA.jar)。在我希望在xhtml页面中沿着组件显式声明转换器的情况下,我很难让自定义转换器工作。我知道网络上已经有很多这样的例子了,我已经回顾了很多(比如)没有运气的例子,这使得这个问题特别令人沮丧。此外,我还使用facescoverter注释的forClass元素实现了一个自定义转换器,它可以正常工作。对于显式声明的转换器,除了使用forClass元素之外,我也用同样的方法进行了处理。相反,我使用的是值元素,或者根本不使用

我正在使用JSF2和JBossEL(JBoss-EL-2.0.0.GA.jar)。在我希望在xhtml页面中沿着组件显式声明转换器的情况下,我很难让自定义转换器工作。我知道网络上已经有很多这样的例子了,我已经回顾了很多(比如)没有运气的例子,这使得这个问题特别令人沮丧。此外,我还使用
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的是null
itemStrValue
。换句话说,
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