Primefaces Menu --Erro implementar Exemplo : java.lang.NullPointerException

3 respostas
E

Pessoal, estou tentando implementar um exemplo do primafaces Menu

e esta dando o erro :

ava.lang.NullPointerException

at org.primefaces.renderkit.OutcomeTargetRenderer.getTargetURL(OutcomeTargetRenderer.java:95)

at org.primefaces.component.menu.BaseMenuRenderer.encodeMenuItem(BaseMenuRenderer.java:77)

at org.primefaces.component.menu.MenuRenderer.encodeContent(MenuRenderer.java:92)

at org.primefaces.component.menu.MenuRenderer.encodeSubmenu(MenuRenderer.java:127)

at org.primefaces.component.menu.MenuRenderer.encodeContent(MenuRenderer.java:96)

at org.primefaces.component.menu.MenuRenderer.encodeMarkup(MenuRenderer.java:73)

at org.primefaces.component.menu.BaseMenuRenderer.encodeEnd(BaseMenuRenderer.java:38)

at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)

at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)

at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)

at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)

at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)

at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)

at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)

at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)

at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)

at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)

at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)

at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)

at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)

at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)

at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)

at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)

at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)

at c

segue abaixo meu codigo :

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.uniplan.controle;

import javax.faces.application.FacesMessage;  
import javax.faces.context.FacesContext;  
import org.primefaces.component.menuitem.MenuItem;  
import org.primefaces.component.submenu.Submenu;  
import org.primefaces.model.DefaultMenuModel;  
import org.primefaces.model.MenuModel;  
  
public class MenuBean {  
  
    private MenuModel model;  
  
    public MenuBean() {  
        model = new DefaultMenuModel();  
          
        //First submenu  
        Submenu submenu = new Submenu();  
        submenu.setLabel("Dynamic Submenu 1");  
          
        MenuItem item = new MenuItem();  
        item.setValue("Dynamic Menuitem 1.1");  
        item.setUrl("#");  
        submenu.getChildren().add(item);  
          
        model.addSubmenu(submenu);  
          
        //Second submenu  
        submenu = new Submenu();  
        submenu.setLabel("Dynamic Submenu 2");  
          
        item = new MenuItem();  
        item.setValue("Dynamic Menuitem 2.1");  
        item.setUrl("#");  
        submenu.getChildren().add(item);  
          
        item = new MenuItem();  
        item.setValue("Dynamic Menuitem 2.2");  
        item.setUrl("#");  
        submenu.getChildren().add(item);  
          
        model.addSubmenu(submenu);  
    }  
  
    public MenuModel getModel() {  
        return model;  
    }     
      
    public void save() {  
        addMessage("Data saved");  
    }  
      
    public void update() {  
        addMessage("Data updated");  
    }  
      
    public void delete() {  
        addMessage("Data deleted");  
    }  
      
    public void addMessage(String summary) {  
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary,  null);  
        FacesContext.getCurrentInstance().addMessage(null, message);  
    }  
}  


<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html 
      xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui"
                xmlns:f="http://java.sun.com/jsf/core"
      
      >
    <head>
        <title>bem vindo</title>
    </head>
    <body>
        <div>bem vindo </div>
<h:form>  
  
    <p:growl id="messages"/>  
  
    <h3>Plain Menu</h3>  
    <p:menu>  
        <p:submenu label="Ajax Menuitems">  
            <p:menuitem value="Save" actionListener="#{menuBean.save}" update="messages" icon="ui-icon-disk" />  
            <p:menuitem value="Update" actionListener="#{menuBean.update}" update="messages" icon="ui-icon-arrowrefresh-1-w"/>  
        </p:submenu>  
        <p:submenu label="Non-Ajax Menuitem">  
            <p:menuitem value="Delete" actionListener="#{menuBean.delete}" update="messages" ajax="false" icon="ui-icon-close"/>  
        </p:submenu>  
        <p:submenu label="Navigations">  
            <p:menuitem value="External" url="http://www.primefaces.org" icon="ui-icon-home"/>  
            <p:menuitem value="Internal" outcome="/mobile/index" icon="ui-icon-star"/>  
        </p:submenu>  
    </p:menu>  
  
    <h3>Overlay</h3>  
    <p:commandButton id="dynaButton" value="Show" type="button"/>  
    <p:menu overlay="true" trigger="dynaButton" my="left top" at="left bottom">  
        <p:submenu label="Ajax Menuitems">  
            <p:menuitem value="Save" actionListener="#{menuBean.save}" update="messages" icon="ui-icon-disk"/>  
            <p:menuitem value="Update" actionListener="#{menuBean.update}" update="messages" icon="ui-icon-arrowrefresh-1-w"/>  
        </p:submenu>  
        <p:submenu label="Non-Ajax Menuitem">  
            <p:menuitem value="Delete" actionListener="#{menuBean.delete}" update="messages" ajax="false" icon="ui-icon-close"/>  
        </p:submenu>  
        <p:submenu label="Navigations">  
            <p:menuitem value="External" url="http://www.primefaces.org" icon="ui-icon-home"/>  
            <p:menuitem value="Internal" outcome="/mobile/index" icon="ui-icon-star"/>  
        </p:submenu>  
    </p:menu>  
  
    <h3>Programmatic Menu</h3>  
    <p:menu model="#{menuBean.model}"/>  
  
</h:form> 
        
        
    </body>
</html>

3 Respostas

H

Troca head por h:head e depois troque body por h:body…

E

Tentei fazer isso : mas continua o mesmo problema

<html 
      xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui"
                xmlns:f="http://java.sun.com/jsf/core"
      
      >
    <h:head>
        <title>bem vindo</title>
    </h:head>
    <h:body>
        <div>bem vindo </div>
                <h:form>  

                    <p:growl id="messages"/>  

                    <h3>Plain Menu</h3>  
                    <p:menu>  
                        <p:submenu label="Ajax Menuitems">  
                            <p:menuitem value="Save" actionListener="#{menuBean.save}" update="messages" icon="ui-icon-disk" />  
                            <p:menuitem value="Update" actionListener="#{menuBean.update}" update="messages" icon="ui-icon-arrowrefresh-1-w"/>  
                        </p:submenu>  
                        <p:submenu label="Non-Ajax Menuitem">  
                            <p:menuitem value="Delete" actionListener="#{menuBean.delete}" update="messages" ajax="false" icon="ui-icon-close"/>  
                        </p:submenu>  
                        <p:submenu label="Navigations">  
                            <p:menuitem value="External" url="http://www.primefaces.org" icon="ui-icon-home"/>  
                            <p:menuitem value="Internal" outcome="/mobile/index" icon="ui-icon-star"/>  
                        </p:submenu>  
                    </p:menu>  

                    <h3>Overlay</h3>  
                    <p:commandButton id="dynaButton" value="Show" type="button"/>  
                    <p:menu overlay="true" trigger="dynaButton" my="left top" at="left bottom">  
                        <p:submenu label="Ajax Menuitems">  
                            <p:menuitem value="Save" actionListener="#{menuBean.save}" update="messages" icon="ui-icon-disk"/>  
                            <p:menuitem value="Update" actionListener="#{menuBean.update}" update="messages" icon="ui-icon-arrowrefresh-1-w"/>  
                        </p:submenu>  
                        <p:submenu label="Non-Ajax Menuitem">  
                            <p:menuitem value="Delete" actionListener="#{menuBean.delete}" update="messages" ajax="false" icon="ui-icon-close"/>  
                        </p:submenu>  
                        <p:submenu label="Navigations">  
                            <p:menuitem value="External" url="http://www.primefaces.org" icon="ui-icon-home"/>  
                            <p:menuitem value="Internal" outcome="/mobile/index" icon="ui-icon-star"/>  
                        </p:submenu>  
                    </p:menu>  

                    <h3>Programmatic Menu</h3>  
                    <p:menu model="#{menuBean.model}"/>  

                </h:form>         
    </h:body>
</html>
T
evandro_araujo:
Tentei fazer isso : mas continua o mesmo problema
<html 
      xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui"
                xmlns:f="http://java.sun.com/jsf/core"
      
      >
    <h:head>
        <title>bem vindo</title>
    </h:head>
    <h:body>
        <div>bem vindo </div>
                <h:form>  

                    <p:growl id="messages"/>  

                    <h3>Plain Menu</h3>  
                    <p:menu>  
                        <p:submenu label="Ajax Menuitems">  
                            <p:menuitem value="Save" actionListener="#{menuBean.save}" update="messages" icon="ui-icon-disk" />  
                            <p:menuitem value="Update" actionListener="#{menuBean.update}" update="messages" icon="ui-icon-arrowrefresh-1-w"/>  
                        </p:submenu>  
                        <p:submenu label="Non-Ajax Menuitem">  
                            <p:menuitem value="Delete" actionListener="#{menuBean.delete}" update="messages" ajax="false" icon="ui-icon-close"/>  
                        </p:submenu>  
                        <p:submenu label="Navigations">  
                            <p:menuitem value="External" url="http://www.primefaces.org" icon="ui-icon-home"/>  
                            <p:menuitem value="Internal" outcome="/mobile/index" icon="ui-icon-star"/>  
                        </p:submenu>  
                    </p:menu>  

                    <h3>Overlay</h3>  
                    <p:commandButton id="dynaButton" value="Show" type="button"/>  
                    <p:menu overlay="true" trigger="dynaButton" my="left top" at="left bottom">  
                        <p:submenu label="Ajax Menuitems">  
                            <p:menuitem value="Save" actionListener="#{menuBean.save}" update="messages" icon="ui-icon-disk"/>  
                            <p:menuitem value="Update" actionListener="#{menuBean.update}" update="messages" icon="ui-icon-arrowrefresh-1-w"/>  
                        </p:submenu>  
                        <p:submenu label="Non-Ajax Menuitem">  
                            <p:menuitem value="Delete" actionListener="#{menuBean.delete}" update="messages" ajax="false" icon="ui-icon-close"/>  
                        </p:submenu>  
                        <p:submenu label="Navigations">  
                            <p:menuitem value="External" url="http://www.primefaces.org" icon="ui-icon-home"/>  
                            <p:menuitem value="Internal" outcome="/mobile/index" icon="ui-icon-star"/>  
                        </p:submenu>  
                    </p:menu>  

                    <h3>Programmatic Menu</h3>  
                    <p:menu model="#{menuBean.model}"/>  

                </h:form>         
    </h:body>
</html>

Primeiramente boa tarde evandro_araujo !!!!

Na sua primeira linha de erro:
at org.primefaces.renderkit.OutcomeTargetRenderer.getTargetURL(OutcomeTargetRenderer.java:95)
Está mostrando que não está conseguindo encontrar o caminho especificado na propriedade "outcome", assim impedindo a renderização do componente.

Faça o seguinte ... nesse trecho de código aqui:

<p:submenu label="Navigations">    
            <p:menuitem value="External" url="http://www.primefaces.org" icon="ui-icon-home"/>    
            <p:menuitem value="Internal" outcome="/mobile/index" icon="ui-icon-star"/>    
        </p:submenu>

tire a propriedade que eu citei, "outcome", e faça isso pros dois exemplos, Plain menu e Overlay, ou teste um de cada vez. Em fim, tire para que possa funcionar, assim evitando a tentativa de acesso a algum diretório que não exista. Não se preocupe que irá funcionar normalmente o componente, sem essa propriedade. "outcome" serve para especificar uma página de saída, um resultado.
Faça isso !!!!

Att,

Ericson de Castro

Criado 28 de janeiro de 2013
Ultima resposta 30 de jan. de 2013
Respostas 3
Participantes 3