繁体   English   中英

javax.faces.component._SelectItemsUtil.matchValue处的java.lang.NullPointerException

[英]java.lang.NullPointerException at javax.faces.component._SelectItemsUtil.matchValue

经过无休止的阅读这里的帖子,尤其是@BalusC的答案后,我仍然无法解决以下问题。

我具有以下复合组件:

<ui:component xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:cc="http://java.sun.com/jsf/composite"
    xmlns:p="http://primefaces.org/ui">
    <cc:interface componentType="testComponent">
        <!-- Define component attributes here -->
         <cc:attribute name="clientId"/>
    </cc:interface>


    <cc:implementation>
        <div id="#{cc.clientId}">

        <div id="test" style="min-width: 310px; height: 500px; margin: 0 auto">1</div>

            <script type="text/javascript">

                    $('#test').text('#{cc.tagList}');
                    alert('#{cc.tagList}');

            </script>
        </div>
    </cc:implementation>
</ui:component>

这是@FacesComponent(“ testComponent')的实现

@FacesComponent("testComponent")
public class TestComponent extends UINamingContainer{
    public String getTagList(){
        List<Tag> tags = (List<Tag>)getAttributes().get("tags");
        String result = "Tags are: ";
        for(Tag tag : tags){
            result += tag.getName();
        }
        return result;
    }
}

这是* .jsf页面,我试图从中使用此自定义组件

<h:form>
    <p:selectCheckboxMenu id="tags_selector"
                            converter="#{tagConverter}" 
                            value="#{tagsRequestsBean.selectedTags}" label="Tag"
                              filter="true" 
                              filterMatchMode="startsWith" 
                              panelStyle="width:250px">
                     <f:selectItems value="#{tagsRequestsBean.tags}" var="tag" itemValue="#{tag}" itemLabel="#{tag.name}" />
                      <f:ajax  event="change" render="test"></f:ajax>
             </p:selectCheckboxMenu>

        <hc:test_component id="test" tags="#{tagsRequestsBean.selectedTags}"></hc:test_component>


        </h:form>

我试图通过p:selectCheckboxMenu选择标签时更新testComponent,但是执行选择时出现以下错误:

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.executePhase(LifecycleImpl.java:192)
    at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:119)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1230)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1071)
    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:914)
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:453)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:515)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:306)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:277)
    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:175)
    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:1702)
Caused by: java.lang.NullPointerException
    at javax.faces.component._SelectItemsUtil.matchValue(_SelectItemsUtil.java:67)
    at javax.faces.component.UISelectMany.validateValue(UISelectMany.java:366)
    at javax.faces.component.UIInput.validate(UIInput.java:627)
    at javax.faces.component.UISelectMany.validate(UISelectMany.java:392)
    at javax.faces.component.UIInput.processValidators(UIInput.java:281)
    at org.apache.myfaces.context.servlet.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:550)
    at org.apache.myfaces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:207)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:773)
    at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1051)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:793)
    at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1051)
    at javax.faces.component.UIForm.visitTree(UIForm.java:290)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:793)
    at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1051)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:793)
    at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1051)
    at org.apache.myfaces.context.servlet.PartialViewContextImpl.processPartialExecute(PartialViewContextImpl.java:379)
    at org.apache.myfaces.context.servlet.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:359)
    at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60)
    at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:88)
    at javax.faces.component.UIViewRoot$ProcessValidatorPhaseProcessor.process(UIViewRoot.java:1394)
    at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1282)
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:758)
    at org.apache.myfaces.lifecycle.ProcessValidationsExecutor.execute(ProcessValidationsExecutor.java:34)
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:172)
    ... 25 more

我究竟做错了什么?

更新:我在Websphere 8.0.0.9上使用JSF 2.0 Apache MyFaces 2.0.3

正如@dognose在他的评论中建议的那样,这是一个转换器问题。 我已经实现了getAsString方法,但是忘了实现getAsObject方法,并且它始终返回null 因此,我现在修复了它,它按应有的方式工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM