Primefaces自动完成空指针异常

时间:2017-05-17 09:41:10

标签: java jsf primefaces jsf-2 autocomplete

我在旧问题中搜索过,但我发现没什么用处;我也搜索了很多东西 我有一个简单的primefaces autocomplete如此定义:

<p:autoComplete id="comNascita" 
value="#{gestioneDomandaResFormBean.datiDomanda.datiAnagrafici.comuneNascita}" 
required="true" 
converter="deComuneConverter"
forceSelection="true" 
var="comune" 
itemLabel="#{comune.descrizione}" 
label="#{ui['ui.res.creaDomanda.crea.domanda.form.comuneNascita']}"
itemValue="#{comune}" 
emptyMessage="Nullo"
completeMethod="#{decodificheBeanSvil.completeComuni}" 
size="55" 
minQueryLength="2"
styleClass="w100" 
cache="true" 
widgetVar="comNascitaWV" 
maxResults="10"/>

这是我的转换器:

@FacesConverter("deComuneConverter")
public class DeComuneConverter implements Converter 
{

    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
    private DeComuneEJB deComuneManager = null;
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) 
    {
        if (value == null || value.trim().equals("")) 
        {
            if( logger.isDebugEnabled() )
            {
                logger.debug("Metodo getAsObject. Passato un value nullo o vuoto <"+value+">. Restituisco null");
            }
            return null;
        } 
        else 
        {
            DeComune deComune = null;
            try 
            {
                deComune = deComuneManager.findById(value);
            } 
            catch (Exception e) 
            {
                if( logger.isWarnEnabled() )
                {

                    logger.warn("Errore nella converter dei comuni; "+e.getMessage(), e);
                }
            }
            return deComune;
        }
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value == null ||  (value instanceof String && ((String)value).trim().equals(""))) 
        {
            if( logger.isDebugEnabled() )
            {
                logger.debug("Metodo getAsString. Passato un value nullo o vuoto <"+value+">; restituisco stringa vuota"); 
            }
            return "";
        } else {
            return String.valueOf(((DeComune) value).getCodCom());
        }
    }
    @PostConstruct
    public void initialize() throws Exception
    {
        InitialContext ic = null;
        try
        {
            ic = new InitialContext();
            deComuneManager = (DeComuneEJB) ic.lookup("java:module/"+DeComuneEJB.class.getSimpleName());
        }
        catch (Exception e) {
            if( logger.isErrorEnabled() )
            {
                logger.error("Errore nella ricerca JNDI dell'EJB per i comuni", e);
            }
            throw e;
        }
        finally 
        {
            if( ic != null )
            {
                ic.close();
            }
        }
    }
}

这是我用完整方法的bean:

@ManagedBean(name = "decodificheBeanSvil")
@ApplicationScoped
public class DecodificheBeanSvil implements Serializable {

    private static final long serialVersionUID = -5773268651349037154L;

    protected static final Log log = LogFactory.getLog(DecodificheBeanSvil.class);

    protected Date currentDate;

    @PostConstruct
    protected void postConstruct() {
        currentDate = new Date();
    }
    public GenereEnum[] getGenereList() {
        return GenereEnum.values();
    }
    public List<DeComune> completeComuni(String startsWith)
    {
        List<DeComune> result = new ArrayList<DeComune>();
        Map<String, DeComune> comuniFake = FakeUtils.getComuniEr();
        Iterator<String> chiaviIterator = comuniFake.keySet().iterator();
        while (chiaviIterator.hasNext()) {
            String chiave = chiaviIterator.next();
            if( chiave.startsWith(startsWith.toLowerCase()) )
            {
                result.add(comuniFake.get(chiave));
            }
        }
        return result;
    }
}

这是我的DeComune POJO:

public class DeComune implements Serializable, Comparable<DeComune> {

    private static final long serialVersionUID = -6250752442360948142L;
    private String codCom;
    private String descrizione;
    private String cap;

    public DeComune() {
        super();
    }

    public DeComune(String codCom, String descrizione, String cap) {
        super();
        this.codCom = codCom;
        this.descrizione = descrizione;
        this.cap = cap;
    }

    public String getCodCom() {
        return codCom;
    }

    public void setCodCom(String codCom) {
        this.codCom = codCom;
    }

    public String getDescrizione() {
        return descrizione;
    }

    public void setDescrizione(String descrizione) {
        this.descrizione = descrizione;
    }

    public String getCap() {
        return cap;
    }

    public void setCap(String cap) {
        this.cap = cap;
    }

    @Override
    public int compareTo(DeComune o) {
        return this.descrizione.compareTo(o.getDescrizione());
    }
}

这是我的FakeUtils

public abstract class FakeUtils {

    private static List<String> elencoComuniFake;
    private static Map<String, DeComune> elencoDeComuneFake;
    public static List<DeComune> fakeComuni()
    {
        elencoDeComuneFake = getMap();
        List<DeComune> result = new ArrayList<DeComune>(elencoComuniFake.size());
        result.addAll(elencoDeComuneFake.values());
        return result;
    }
    public static Map<String, DeComune> getComuniEr()
    {
        if( elencoDeComuneFake == null )
        {
            elencoDeComuneFake = getMap();
        }
        return elencoDeComuneFake;
    }
    public static DeComune getById( String id )
    {
        if( elencoDeComuneFake == null )
        {
            elencoDeComuneFake = getMap();
        }
        return elencoDeComuneFake.get(id.trim().toLowerCase());
    }
    private static Map<String, DeComune> getMap()
    {
        if( elencoDeComuneFake == null )
        {
            elencoComuniFake = elencoComuniFake();

            elencoDeComuneFake = new HashMap<String, DeComune>(elencoComuniFake.size());
            for (String nomeComune : elencoComuniFake) 
            {
                elencoDeComuneFake.put(nomeComune.trim().toLowerCase(), new DeComune(nomeComune, nomeComune, nomeComune));
            }
        }
        return elencoDeComuneFake;
    }
    private static List<String> elencoComuniFake()
    {
        if( elencoComuniFake == null )
        {
            elencoComuniFake = new ArrayList<String>();
            elencoComuniFake.add("Agazzano");
            elencoComuniFake.add("Albareto");
        }
        return elencoComuniFake;
    }

}

当我在autocomplet字段中输入内容时,我得到以下异常:

11:33:07,235 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (http-localhost/127.0.0.1:20000-3) Error Rendering View[/secure/domanda/_form/creaDomanda.xhtml]: javax.faces.event.AbortProcessingException: java.lang.NullPointerException
    at org.primefaces.context.PrimePartialResponseWriter.startMetadataIfNecessary(PrimePartialResponseWriter.java:303) [primefaces-6.0.jar:6.0]
    at org.primefaces.context.PrimePartialResponseWriter.startUpdate(PrimePartialResponseWriter.java:142) [primefaces-6.0.jar:6.0]
    at org.omnifaces.context.OmniPartialViewContext$OmniPartialResponseWriter.startUpdate(OmniPartialViewContext.java:300) [omnifaces-2.0.jar:2.0]
    at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:541) [jsf-impl-2.1.29-03.jar:2.1.29-03]
    at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183) [jsf-impl-2.1.29-03.jar:2.1.29-03]
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1611) [jsf-api-2.1.29-03.jar:2.1]
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1622) [jsf-api-2.1.29-03.jar:2.1]
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1622) [jsf-api-2.1.29-03.jar:2.1]
    at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:383) [jsf-impl-2.1.29-03.jar:2.1.29-03]
    at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:302) [jsf-impl-2.1.29-03.jar:2.1.29-03]
    at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:57) [primefaces-6.0.jar:6.0]
    at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183) [jsf-api-2.1.29-03.jar:2.1]
    at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:973) [jsf-api-2.1.29-03.jar:2.1]
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1778) [jsf-api-2.1.29-03.jar:2.1]
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:426) [jsf-impl-2.1.29-03.jar:2.1.29-03]
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125) [jsf-impl-2.1.29-03.jar:2.1.29-03]
    at com.ocpsoft.pretty.faces.application.PrettyViewHandler.renderView(PrettyViewHandler.java:163) [prettyfaces-jsf2-3.3.3.jar:]
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:286) [jsf-api-2.1.29-03.jar:2.1]
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:286) [jsf-api-2.1.29-03.jar:2.1]
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) [jsf-impl-2.1.29-03.jar:2.1.29-03]
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.29-03.jar:2.1.29-03]
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) [jsf-impl-2.1.29-03.jar:2.1.29-03]
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:604) [jsf-api-2.1.29-03.jar:2.1]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final.jar:]
    at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) [prettyfaces-jsf2-3.3.3.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:840) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:622) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:560) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:488) [jbossweb-7.0.17.Final.jar:]
    at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:137) [prettyfaces-jsf2-3.3.3.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final.jar:]
    at it.eng.sil.res.controller.filter.VerificaAccessoFilter.doFilter(VerificaAccessoFilter.java:93) [classes:]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final.jar:]
    at org.jasig.cas.client.util.HttpServletRequestWrapperFilter.doFilter(HttpServletRequestWrapperFilter.java:75) [cas-client-core-3.2.1.jar:3.2.1]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final.jar:]
    at org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:107) [cas-client-core-3.2.1.jar:3.2.1]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final.jar:]
    at org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:201) [cas-client-core-3.2.1.jar:3.2.1]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final.jar:]
    at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:76) [cas-client-core-3.2.1.jar:3.2.1]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final.jar:]
    at it.eng.sil.res.controller.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:95) [classes:]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.17.Final.jar:]
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.3.Final.jar:7.1.3.Final]
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:165) [jboss-as-web-7.1.3.Final.jar:7.1.3.Final]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.17.Final.jar:]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:372) [jbossweb-7.0.17.Final.jar:]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.17.Final.jar:]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:679) [jbossweb-7.0.17.Final.jar:]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931) [jbossweb-7.0.17.Final.jar:]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_67]
Caused by: java.lang.NullPointerException
    at org.primefaces.util.ResourceUtils.filterStylesheets(ResourceUtils.java:96) [primefaces-6.0.jar:6.0]
    at org.primefaces.context.PrimePartialResponseWriter.startMetadataIfNecessary(PrimePartialResponseWriter.java:287) [primefaces-6.0.jar:6.0]
    ... 64 more

我几个小时就到了这里......有人知道我的问题是什么吗?

谢谢

0 个答案:

没有答案