Menu JSF Primefaces

Pessoal,

Estou tentando criar um menu. Ele já esta chamando a página, porém não consigo executar ação nenhuma da página chamada, tipo clicar em um commandLink, pois ocorre o erro abaixo no browser e o comando não é executado. Executando a tela chamada por fora do menu ela funciona corretamente.

Detalhes dos erros da página da Web

Mensagem: Chamada inesperada para acesso à propriedade ou método.
Linha: 23
Caractere: 23302
Código: 0
URI: http://localhost:8080/EJBProject/javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces&v=3.1.1

Segue o código do meu menu.xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">
	
	<h:head>
	</h:head>
	<link rel="stylesheet" type="text/css" href="#{facesContext.externalContext.requestContextPath}/custom-theme/jquery-ui.css"></link>
	
	<h:body>
		<f:view>
			<h:form>
			
			<p:panel>

				<p:commandButton id="pagina1" value="Pagina 1" actionListener="#{menuController.pagina1()}" 
				                                               update="pnlConteudo" 
				                                               ajax="false" 
				                                               immediate="true" 
				                                               process="@this"/>
				<p:commandButton id="pagina2" value="Pagina 2" action="#{menuController.pagina2()}"/>  
	
				<p:outputPanel id="pnlConteudo">   
				    <div id="conteudo">   
				    	<ui:insert id="cont">
				        	<ui:include src="#{menuController.pagina}" />
				        </ui:insert>
				    </div>   
				</p:outputPanel>
			</p:panel>

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

Segue a minha página ClienteJSF.xhtml que é que esta sendo chamada:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

<h:head>

</h:head>
	<link rel="stylesheet" type="text/css" href="#{facesContext.externalContext.requestContextPath}/custom-theme/jquery-ui.css"></link>
	
<h:body>
	
<f:view>
	<h:form>
	<p:panel id="panelPrincipal">
		<p:panelGrid columns="3">
			<p:commandLink value="Novo" action="#{clienteController.btnNovo()}" update="panelPrincipal"/>
			<p:commandLink value="Salva" action="#{clienteController.btnSalvar()}" update="panelPrincipal"/>
			<p:commandLink value="Cancela" action="#{clienteController.btnCancela()}" update="panelPrincipal"/>
		</p:panelGrid>
		<p:panelGrid columns="2">
			<h:outputText value="Código"></h:outputText>
			<h:inputText value="#{clienteController.cliente.cdCliente}" disabled="true" style="text-aligne:rigth"></h:inputText>
			
			<h:outputText value="Nome"></h:outputText>
			<h:inputText value="#{clienteController.cliente.nmCliente}"></h:inputText>
		</p:panelGrid>
		<p:panelGrid columns="1" width="700" id="panelDataTable"  update="panelPrincipal">
				<p:dataTable width="100%" id="ListaClientes" update="panelDataTable" value="#{clienteController.listaCliente}" var="cli" rows="3" paginator="true">
					<p:column>
						<h:outputText value="#{cli.cdCliente}"></h:outputText>
						<f:facet name="header">
							<h:outputText value="Código"></h:outputText>
						</f:facet>
					</p:column>
					<p:column>
						<h:outputText value="#{cli.nmCliente}"></h:outputText>
						<f:facet name="header">
							<h:outputText value="Nome"></h:outputText>
						</f:facet>
					</p:column>
					<p:column>
							<p:commandLink value="Editar" action="#{clienteController.editar}" ajax="false">
								<f:param name="codigo" value="#{cli.cdCliente}"></f:param>
							</p:commandLink>
							<p:spacer width="10" />
							<p:commandLink value="Excluir" action="#{clienteController.btnExcluir}" ajax="false">
								<f:param name="codigo" value="#{cli.cdCliente}"></f:param>
							</p:commandLink>
					</p:column>
				</p:dataTable>
				<p:commandLink value="Atualiza" action="#{clienteController.btnRefresh()}" update="panelDataTable"/>
		</p:panelGrid>
	</p:panel>
	</h:form>
</f:view>

</h:body>

</html>

Agradeço a atenção.

Ola amigo

nesse botao o ajax tem q ser true caso contrario o update nao funcionara pois voce esta desabilitando o ajax, outra coisa se vc usar o actionListener o metodo no bacBean deve ter um ActionEvent como parametro e chamada do metodo na pagina nao pode ter parenteses

<p:commandButton id="pagina1" value="Pagina 1" actionListener="#{menuController.pagina1}" update="pnlConteudo" ajax="true" immediate="true" process="@this"/>

Se nao funcionar posta o managedbean tbm

Abraços

[quote=DarthCego]Ola amigo

nesse botao o ajax tem q ser true caso contrario o update nao funcionara pois voce esta desabilitando o ajax, outra coisa se vc usar o actionListener o metodo no bacBean deve ter um ActionEvent como parametro e chamada do metodo na pagina nao pode ter parenteses

<p:commandButton id="pagina1" value="Pagina 1" actionListener="#{menuController.pagina1}" update="pnlConteudo" ajax="true" immediate="true" process="@this"/>

Se nao funcionar posta o managedbean tbm

Abraços[/quote]

Darth, fiz como você orientou, mas a tela chamada continua sem executar seus eventos.

Mas a mensagem mudou no browser. O que esta aparecendo agora no rodapé do browser é javascript:void(0);

Segue o managedbean do menu já com a alteração que você pediu:

package com.ep.menu;

import javax.faces.bean.ManagedBean;
import javax.faces.event.ActionEvent;

@ManagedBean
public class MenuController {
	
	private String pagina;   
	  
	public void pagina1(ActionEvent evt){   
	    setPagina("ClienteJSF.xhtml");   
	}   
	public void pagina2(){   
	    setPagina("pagina2.xhtml");   
	}
	
	public String getPagina() {
		return pagina;
	}
	
	public void setPagina(String pagina) {
		this.pagina = pagina;
	}
	
}

Segue o managedbean da tela chamada:

package com.ep.cliente;

import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import javax.faces.view.facelets.FaceletContext;

import com.sun.faces.taglib.html_basic.DataTableTag;

@ManagedBean
@SessionScoped
public class ClienteController {

	@EJB
	private ClienteEJB clienteEJB;
	private Cliente cliente;
	private Cliente clienteOld;
	
	private List<Cliente> listaCliente;
	
	public ClienteController(){
		cliente = new Cliente();
	}
	
	public void editar(){
		FacesContext context = FacesContext.getCurrentInstance();
		int codigo = Integer.parseInt(context.getExternalContext().getRequestParameterMap().get("codigo"));
		cliente = clienteEJB.listaClientePorCodigo(codigo);
		//System.out.println("Código do Cliente: "+(Cliente)(event.getSource().getClass()));
	}
	
	public void btnNovo(){
		clienteOld = cliente;
		cliente = new Cliente();
	}
	
	public void btnSalvar(){
		clienteEJB.grava(cliente);
		btnRefresh();
	}
	
	public void btnExcluir(){
		FacesContext context = FacesContext.getCurrentInstance();
		int codigo = Integer.parseInt(context.getExternalContext().getRequestParameterMap().get("codigo"));
		clienteEJB.excluir(codigo);
	}
	
	public void btnCancela(){
		cliente = clienteOld;
	}
	
	public void btnRefresh(){
		listaCliente = clienteEJB.listaTodos();
	}
	
	public List<Cliente> getListaCliente() {
		return listaCliente;
	}

	public void setListaCliente(List<Cliente> listaCliente) {
		this.listaCliente = listaCliente;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

}

Obrigado

Ola amigo

anota todos os managedBeans com @SessionScoped inclusive o MenuController

[quote=DarthCego]Ola amigo

anota todos os managedBeans com @SessionScoped inclusive o MenuController[/quote]

Darth,

A ClienteController já estava. Coloquei a MenuController com @SessionScoped, mas não adiantou.

Por favor não me abandone, já tentei em tudo que é fórum e não encontro solução pra isso.

Obrigado.

Amigo eu testei seu codigo aqui e acho q descobri o problema voce fechava o form do seu menuController depois do include porém como a pagina a ser chamada pelo include tbm possui um form acaba dando problema tenta do jeito q fiz abaixo, tambem retirei o immediate do botao pois nao ha necessidade dele

<h:form> <p:panel> <p:commandButton id="pagina1" value="Pagina 1" actionListener="#{controller1.pagina1}" update=":pnlConteudo" process="@this"/> </p:panel> </h:form> <p:panel id="pnlConteudo"> <ui:include src="#{controller1.pagina}" /> </p:panel>

Qualquer coisa estamos ae

Amigo Darth,

Muito obrigado. Funcionou !!!

Você é o Cara !!!

Abraços.