JSF 2 - Include dinâmico faz botões perderem ação

Pessoal reparei que quando tento trabalhar com Include dinâmico qualquer que seja o formulário chamado na página que foi incluida
não funciona. O botões perdem as ações, tanto faz se é um h:commandButton ou botão do primefaces com ajax.

Isso tem solução ? Queria fazer um sistema nesse molde, que quando o usuario seleciona uma opção no menu, somente
parte do corpo da página é atualizada com esse include. veja abaixo:

[color=darkblue]CÓDIGO DA PÁGINA PRINCIPAL[/color]

<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.prime.com.tr/ui">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
	<ui:composition template="/templates/_template.xhtml">			
    	<ui:define name="corpo">
    	    	
	<h:form id="formMenu">
		<p:growl showDetail="true" sticky="true"/>	
		<p:menubar>
			<p:submenu label="Iniciar">
				<p:menuitem value="Início" actionListener="#{menuController.setPrincipal}" update="outputPanelConteudo" />
				<p:menuitem value="Logout" actionListener="#{loginBean.doLogout}" ajax="false"/>								
			</p:submenu>
			<p:submenu label="Cadastro">
				<p:menuitem value="Usuários"    actionListener="#{menuController.setUsuario}"    update="outputPanelConteudo"/>
				<p:menuitem value="Questões"    actionListener="#{menuController.setQuestao}"    update="outputPanelConteudo"/>
				<p:menuitem value="Compilação"  actionListener="#{menuController.setCompilacao}" update="outputPanelConteudo"/>
				<p:menuitem value="Professores" actionListener="#{menuController.setProfessor}"  update="outputPanelConteudo"/>					
				<p:menuitem value="Disciplinas" actionListener="#{menuController.setDisciplina}" update="outputPanelConteudo"/>
			</p:submenu>
			<p:submenu label="Configurações">
				<p:menuitem value="Sobre o Sistema"/>				
			</p:submenu>
		</p:menubar>
	</h:form>		
		
	<p:outputPanel id="outputPanelConteudo">
		<ui:include src="#{menuController.paginaAtual}"/>
	</p:outputPanel>

[color=blue]BEAN QUE CONTROLA OPÇÃO SELECIONADA NO MENU[/color]

package com.teste.mb;

import java.io.Serializable;

import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;

@SessionScoped
@ManagedBean
public class MenuController implements Serializable {
	private static final long serialVersionUID = -8567686474409512966L;
	
	private String paginaAtual;

	public void setPaginaAtual(String paginaAtual) {
		this.paginaAtual = paginaAtual;
	}

	public String getPaginaAtual() {
		return paginaAtual;
	}
	
	public void setPrincipal(){
		setPaginaAtual("mainpage.xhtml");
	}

	public void setProfessor(){
		setPaginaAtual("professor");
	}

	public void setQuestao(){
		setPaginaAtual("questao");
	}

	public void setDisciplina(){
		setPaginaAtual("disciplina.xhtml");
	}

	public void setCompilacao(){
		setPaginaAtual("compilacao");
	}
	
	public void setUsuario(){
		setPaginaAtual("usuario.xhtml");
	}	
}

[color=darkblue]PÁGINA QUE QUERO INCLUIR. <h:include> da página principal[/color]

&lt;h:body&gt;		
		&lt;h:form id="formUsuarioCad"&gt;
		&lt;p:panel id="xota" closable="true" header="Cadastro de Usuário"&gt;

			&lt;h:panelGrid columns="2"&gt;	
				&lt;h:outputLabel value="Código:"  rendered="#{usuarioBean.usuario.id != null}"/&gt;

				&lt;p:inputText id="codigo" value="#{usuarioBean.usuario.id}" 
					 rendered="#{usuarioBean.usuario.id != null}"/&gt;

				&lt;h:outputLabel value="Nome p/ Login:" /&gt;

				&lt;p:inputText id="login" required="true" value="#{usuarioBean.usuario.login}"
					requiredMessage="Campo [Nome p/ login] obrigatório" /&gt;

				&lt;h:outputLabel value="Senha:" /&gt;

				&lt;p:password value  = "#{usuarioBean.usuario.senha}" 
					minLength="6" promptLabel="Digite uma senha segura"
					goodLabel="Boa" weakLabel="Razoável" strongLabel="Excelente" /&gt;


 				&lt;h:commandButton value = "Salvar com ajax externo" action = "#{usuarioBean.grava}"&gt;
&lt;!--	    			&lt;f:ajax execute="@form" render="@form"/&gt;--&gt;
    			&lt;/h:commandButton&gt;

Tentou colocar o nome do form em vez de @form ?

Eu uso include também e fica assim:

<p:commandButton  update="formEndereco, msgCadastro" process="@this" action="#{bean.salvar}">

[quote=edudebom]Tentou colocar o nome do form em vez de @form ?

Eu uso include também e fica assim:

<p:commandButton  update="formEndereco, msgCadastro" process="@this" action="#{bean.salvar}">

Mas vc já teve esse problema que estou te falando ? Qual versão do primefaces vc tá usando ?

abraços

Tive sim. Uso o 2.2 Final. Você usa form dentro de form ?

Até cheguei a usar, fiz de tudo no desespero. Passei a quarta feira de cinzas tentando fazer isso funcionar.

O desespero era tanto que tentei até ao invés de usar rendered, optei por visible. Olha que absurdo. hehe

Estou pensando em colocar um <p:outputpanel> com rendered, será que funciona ao invés de include ?

abraços

Form aninhado dá muito problema. Recomendado não usar. Por isso perguntei. Como não está usando deixe assim. :slight_smile:

Tente remover o <h:body> do teu include.

[quote=edudebom]Form aninhado dá muito problema. Recomendado não usar. Por isso perguntei. Como não está usando deixe assim. :slight_smile:

Tente remover o <h:body> do teu include.[/quote]

Vou testar isso agora e já posto o resultado. :wink:

[quote=edudebom]Form aninhado dá muito problema. Recomendado não usar. Por isso perguntei. Como não está usando deixe assim. :slight_smile:

Tente remover o <h:body> do teu include.[/quote]

Fala ai amigão, testei e também não deu certo. Não sei mais o que faço…

	<h:form id="formMenu">
		<p:growl showDetail="true" sticky="true"/>	
		<p:menubar>
			<p:submenu label="Iniciar">
				<p:menuitem value="Início"  action="#{menuController.setusuario}" update="bola"  />

<!--				<p:menuitem value="Logout" action="#{loginBean.doLogout}" ajax="false"/>								-->
			</p:submenu>
			<p:submenu label="Cadastro">
				<p:menuitem value="Usuários"    action="#{menuController.chamaUsuario}"    ajax="false"/>
				
				<p:menuitem value="Usuários - Ajax" actionListener="#{menuController.setUsuario}" 
					process="@this"	update="bola"   />				
				
				<p:menuitem value="Questões"    action="#{menuController.setQuestao}"      ajax="false" />				
				<p:menuitem value="Compilação"  action="#{menuController.setCompilacao}"   ajax="false" />
				<p:menuitem value="Professores" action="#{menuController.setProfessor}"    ajax="false" />					
				<p:menuitem value="Disciplinas" action="#{menuController.chamaDisciplina}" ajax="false"/>
			</p:submenu>
			<p:submenu label="Configurações">
				<p:menuitem value="Sobre o Sistema"/>				
			</p:submenu>
		</p:menubar>
	</h:form>		
	
	<p:outputPanel id="bola">
		<p:panel rendered="#{menuController.paginaAtual == 'usuario'}">
			<ui:include src="usuario.xhtml" />
		</p:panel>				
	</p:outputPanel>
		<h:form id="formUsuarioCad" >
		<p:panel id="xota" closable="true" header="Cadastro de Usuário">

			<h:panelGrid columns="2">	
				<h:outputLabel value="Código:"  rendered="#{usuarioBean.usuario.id != null}"/>

				<p:inputText id="codigo" value="#{usuarioBean.usuario.id}" 
					 rendered="#{usuarioBean.usuario.id != null}"/>

				<h:outputLabel value="Nome p/ Login:" />

				<p:inputText id="login" required="true" value="#{usuarioBean.usuario.login}"
					requiredMessage="Campo [Nome p/ login] obrigatório" />

				<h:outputLabel value="Senha:" />

				<p:password value  = "#{usuarioBean.usuario.senha}" 
					minLength="6" promptLabel="Digite uma senha segura"
					goodLabel="Boa" weakLabel="Razoável" strongLabel="Excelente" />									

				<p:commandButton id="btnSalvar" value="Gravar" 
					actionListener="#{usuarioBean.grava()}"  
					process="@this" update="formUsuarioCad"/>
	
 			</h:panelGrid>				
		</p:panel>
		</h:form>

Conseguiu resolver amigo?

Não !!!

Alguém resolveu este problema???

ESTOU COM O MESMO PROBLEMA …

JÁ TENTEI DE VÁRIAS FORMAS E NÃO FUNCIONA … ALGUEM CONSEGUIU RESOLVER ?