【问题标题】:JSF2: NullpointerException at custom composite componentJSF2:自定义复合组件处的 NullpointerException
【发布时间】:2012-12-07 00:13:53
【问题描述】:

我一直在尝试创建一个自己的组件来“替换”Richfaces 垫片,这在 Richfaces 4 中不再可用。

我找到了实际实现的链接:https://community.jboss.org/wiki/SpacerImplementationForJSF2OrRichFaces4

我尝试注册新的taglib:

richext.taglib.xml

<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
    version="2.0">

<namespace>http://java.sun.com/jsf/composite/richext</namespace>
    <tag>
        <tag-name>spacer</tag-name>
        <source>../richext/spacer.xhtml</source>
    </tag>

web.xml

<context-param>
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
    <param-value>WEB-INF/richext.taglib.xml</param-value>
</context-param>

将 spacer.xhtml 稍微更改为:

<composite:implementation>

    <h:panelGroup rendered="#{cc.attrs.height > 0}">
        <br/>
    </h:panelGroup>

    <h:graphicImage value="../img/spacer.gif"
                    width="#{cc.attrs.width}px"
                    height="#{cc.attrs.height}px"/>
</composite:implementation>

我加了

xmlns:richext="http://java.sun.com/jsf/composite/richext"

到我想使用分隔符的页面。

我的文件: WebContent/WEB-INF/richext.taglib.xml

WebContent/richext/spacer.xhtml

WebContent/img/spacer.gif

现在,当访问我使用分隔符的页面时(其他页面工作正常),我在浏览器中收到 NullpointerException,而不是在服务器日志中。

java.lang.NullPointerException
at org.apache.myfaces.view.facelets.tag.composite.CompositeComponentDefinitionTagHandler.apply(CompositeComponentDefinitionTagHandler.java:113)
at org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:57)
at org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:48)
at org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:394)
at org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:448)
at org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:390)
at org.apache.myfaces.view.facelets.tag.UserTagHandler.apply(UserTagHandler.java:138)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:51)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:59)
at org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53)
at org.apache.myfaces.view.facelets.tag.jsf.ComponentTagHandlerDelegate.apply(ComponentTagHandlerDelegate.java:294)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:54)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:51)
at org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:57)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:51)
at org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:48)
at org.apache.myfaces.view.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:179)
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.buildView(FaceletViewDeclarationLanguage.java:417)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:78)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1188)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:763)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:454)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:125)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:77)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:919)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1016)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:895)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
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:511)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:276)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
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:775)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1659)

我哪里做错了?我错过了什么吗?

如果这很重要,我的服务器是 Websphere 8.0.0.2。

提前致谢

【问题讨论】:

  • 缺少 但这不是我的错误 :)
  • 并使用 MyFaces 2.0.15。所以现在我终于明白了
  • “我终于明白了”是什么意思?你的问题解决了吗?
  • 不,我的意思是我终于提供了其他人可能正在寻找的所有信息。很抱歉让您感到困惑
  • 没有人能解决这个问题吗?很难相信我是唯一有这个问题的人

标签: jsf jsf-2 myfaces composite-component


【解决方案1】:

您根本不需要 richext.taglib.xml 文件和 web.xml 条目。只需将复合组件放在/resources/richext 文件夹中,完全按照您找到的答案中的说明。您的具体问题是因为您试图将复合组件注册为标记文件(这是两个完全独立的概念)。不正确的 taglib 文件可能导致 MyFaces 像这样阻塞。

另见:

【讨论】:

    猜你喜欢
    • 2017-10-10
    • 1970-01-01
    • 2011-11-27
    • 2011-11-10
    • 2012-08-20
    • 1970-01-01
    • 2012-04-10
    • 2012-09-10
    • 1970-01-01
    相关资源
    最近更新 更多