Selectonemenu não renderiza com ajax - primefaces

4 respostas
D
Estou com um problema que já está me perturbando há alguns dias. Tenho um p:selectonemenu que atualiza outro p:selectonemenu atraves de uma chamada p:ajax. Porém o segundo p:selectonemenu não renderiza. Quando uso assim, funciona.
<h:outputText value="Período por: " />  
       <p:selectOneMenu id="fldTipoPeriodo" value="#{sigKpiQtAtendimentos.periodoTipo}"> 
    	    	<p:ajax update="fldPeriodoInicial fldPeriodoFinal"
       			event="change" 
           		listener="#{sigKpiQtAtendimentos.trocaPeriodo()}" />   
    	    	<f:selectItem itemLabel="Selecione..." itemValue="" /> 
    	    	<f:selectItems value="#{sigKpiQtAtendimentos.periodosTipos}" />
       </p:selectOneMenu> 
    	<h:outputText value="Intervalo : " />
    	<h:selectOneMenu id="fldPeriodoInicial" value="#{sigKpiQtAtendimentos.periodoInicial}" >
    	    	<f:selectItem itemLabel="Período Inicial..." itemValue="" /> 
    	    	<f:selectItems value="#{sigKpiQtAtendimentos.periodosTiposItens}"/>
    	</h:selectOneMenu>
mas não funciona quando uso assim
<h:outputText value="Período por: " />  
       <p:selectOneMenu id="fldTipoPeriodo" value="#{sigKpiQtAtendimentos.periodoTipo}"> 
    	    	<p:ajax update="fldPeriodoInicial fldPeriodoFinal"
       			event="change" 
           		listener="#{sigKpiQtAtendimentos.trocaPeriodo()}" />   
    	    	<f:selectItem itemLabel="Selecione..." itemValue="" /> 
    	    	<f:selectItems value="#{sigKpiQtAtendimentos.periodosTipos}" />
       </p:selectOneMenu> 
    	<h:outputText value="Intervalo : " />
    	<p:selectOneMenu id="fldPeriodoInicial" value="#{sigKpiQtAtendimentos.periodoInicial}" >
    	    	<f:selectItem itemLabel="Período Inicial..." itemValue="" /> 
    	    	<f:selectItems value="#{sigKpiQtAtendimentos.periodosTiposItens}"/>
    	</p:selectOneMenu>
o trecho do bean que faz a mudança está assim:
public void trocaPeriodo(){  
        if(periodoTipo != null && !periodoTipo.equals(""))  
        	periodosTiposItens = periodosData.get(periodoTipo);  
        else  
        	periodosTiposItens = new HashMap<String, String>();  
    }
Alguém sabe como posso resolver? Uso Primefaces 3.5

4 Respostas

R

E acrescentando process="@this" no primeiro select resolve?

D

Oi Roselito,
Não resolve, não.
Aceito outras sugestões. :smiley:

Até verifiquei com firebug. Ele gera os dados mas não os apresenta. Já testei com primefaces 3.4 e com o 4.0 e não obtive resultado favorável.

R

Duas sugestões pra tentar descobrir o que está acontecendo:

1 - mandar atualizar algum container que esteja fora dos select, um painel, ou até @form.

2 - criar um container do JSF ou do Primefaces em volta do segundo select (panelgrid, ou outputpanel) e mandar atualizar o container.

D
Roselito Fávero da Silva:
Duas sugestões pra tentar descobrir o que está acontecendo:

1 - mandar atualizar algum container que esteja fora dos select, um painel, ou até @form.

2 - criar um container do JSF ou do Primefaces em volta do segundo select (panelgrid, ou outputpanel) e mandar atualizar o container.


Neste caso ele deixa de renderizar tanto o selectOneMenu com id="fldTipoPeriodo" quanto os alvos fldPeriodoInicial e fldPeriodoFinal se os selectOneMenu destes últimos forem do elementos de primefaces.

Encontrei outra solução para que o projeto não fique parado muito tempo neste ponto. xhtml original (o que está apresentando erro) estava com a estrutura abaixo:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<ui:composition template="/paginas/templates/cadastroTemplate.xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui"
> 
	<ui:define name="cadastro"> 
		<h:outputStylesheet library="css" name="sig.css" />
		<div id="corpo-pagina"> <!-- Inicio Corpo da pagina -->
			<div id="divEsquerda" style="width:5%;">.</div>
			<div id="divformulario" class="classFormulario" style="width:90%;">
				<div id="divformN">
					<div id="divformNW" style="float:left;width:50%">
						<!-- Aqui entra um gráfico -->
					</div><!-- Fim divformNW -->
				 	<div id="divformNE" style="float:left;width:50%">
				 		<!-- Aqui entra um gráfico -->
					</div><!-- Fim divformNE -->
            	</div><!-- Fim divformN -->
            	<p:separator />
           		<div id="divformS" >
           			<div id="divformSW" style="float:left;width:50%">
           				<h:form id="frmFiltro"  prependId="false" >
	           				<p:panel id="panel" header="Filtros" style="margin-bottom:10px;">  
						        <h:panelGrid columns="3" cellpadding="5">  	        
					            	<h:outputText value="Período por: " />  
							        <p:selectOneMenu id="fldTipoPeriodo" value="#{sigKpiQtAtendimentos.periodoTipo}" process="@this"
							         > 
							        	<p:ajax update="fldPeriodoInicial fldPeriodoFinal"
							        			event="change" 
							            		listener="#{sigKpiQtAtendimentos.trocaPeriodo()}" />   
							        	<f:selectItem itemLabel="Selecione..." itemValue="" /> 
							            <f:selectItems value="#{sigKpiQtAtendimentos.periodosTipos}" />
							        </p:selectOneMenu> 
							        <br />
							        <h:outputText value="Intervalo : " />
							        <p:selectOneMenu id="fldPeriodoInicial" value="#{sigKpiQtAtendimentos.periodoInicial}" >
							        	<f:selectItem itemLabel="Período Inicial..." itemValue="" /> 
						        		<f:selectItems value="#{sigKpiQtAtendimentos.periodosTiposItens}"/>
						        	</p:selectOneMenu>
						        	<h:selectOneMenu id="fldPeriodoFinal" value="#{sigKpiQtAtendimentos.periodoFinal}" >
							        	<f:selectItem itemLabel="Período Final..." itemValue="" /> 
						        		<f:selectItems value="#{sigKpiQtAtendimentos.periodosTiposItens}"/>
						        	</h:selectOneMenu>
						        	<h:outputText value="Especialidade: " />
									<!-- outros filtros entravam aqui mas foram removidos na tentativa deisolar o problema -->
									<br />
	  						    </h:panelGrid>
					    	</p:panel>
					    </h:form>
          			</div><!-- Fim divformSW -->
	           		<div id="divformSE" style="float:left;width:50%">
	           			<h:form id="frmListagem">
							<!-- Aqui entra um dataTable -->
						</h:form>
	           		</div><!-- Fim divformSE -->
				</div><!-- Fim divformS -->							 
			</div><!-- Fim da divformulario -->
		</div><!-- Fim da div corpo-pagina -->
    </ui:define>
</ui:composition>
Joguei o template pro alto (criei uma cópia renomeada para não perder este original) e remontei toda a pagina com h:head e h:body e está funcionando. Está porco pois não estou compatimentalizando, mas está funcionando sem erro e posso continuar o projeto. Porém este bug (não se se meu ou do primefaces) ainda está engasgado e continuo aceitando sugestões.
Criado 27 de setembro de 2013
Ultima resposta 28 de set. de 2013
Respostas 4
Participantes 2