a4j:support não funciona em áreas que podem não ser renderizadas

5 respostas
G

Olá Senhores!

Estou com um pequeno problema aqui. Tenha uma página utilizando tabs. Para cada Tab faço um include para uma página que contém o conteúo da Tab, como mostrado no código:

<f:view>
	<a4j:form>
		<rich:tabPanel>
			<rich:tab label="Análise de Votos por Cidade" rendered="#{userBean.showTab['1']}"> 
				<jsp:include page="/faces/cityAnalisys.jsp" />
			</rich:tab>
		</rich:tabPanel>
	</a4j:form>
</f:view>

Nesse caso, o códig da página cityAnalisys.jsp é o seguinte:

<body>
	<a4j:outputPanel ajaxRendered="true">
		<rich:panel header="Localidade">
			<h:panelGrid columns="5">
				<h:outputLabel for="state" value="Estado:" />
				<h:selectOneMenu id="state" value="#{cityBean.state}">
					<f:selectItem itemValue="" itemLabel="Selecione..." />
					<f:selectItems value="#{stateBean.abbreviations}" />
					<a4j:support event="onchange" ajaxSingle="true" 
						action="#{cityBean.changeState}" reRender="state, cityName" />
				</h:selectOneMenu>
				<h:outputLabel for="cityName" value="Cidade:" />
				<h:selectOneMenu id="cityName" value="#{cityBean.name}">
					<f:selectItem itemValue="" itemLabel="Selecione..." />
					<f:selectItems value="#{cityBean.allForState}" />
					<a4j:support event="onchange" ajaxSingle="true" 
						action="#{cityBean.changeCity}" reRender="cityName,cityData,electionsData" />
				</h:selectOneMenu>
				<!-- <a4j:commandButton value="Visualizar" /> -->
			</h:panelGrid>
		</rich:panel>
	</a4j:outputPanel>
</body>

Desse jeito, código ajax para atualizar a lista de cidades não funciona. Entretanto, se eu remover o atributo rendered da primeira página, o código funciona normalmente. Alguém saberia me explicar por que isso acontece e, se possível, como solucionar esse problema?

Grato.

5 Respostas

A

Olha, não tenho certeza, mas como sugestão indico o uso da tag a4j:include ao invés de jsf:include.
Tenho a impressão que esse erro tem a ver com a ordem na qual a página passa pelos diversos mecanismos de renderização e processamento da página, mas posso estar falando bobagem.

G

Olá Alexandre, utilizei da forma que você recomendou, mas o funcionamento continua o mesmo, ou seja, sem utilizar o atributo rendered funciona normalmente porém, quando eu defino esse atributo, a função ajax passa a não funcionar mais

G

Bom… desisti temporiamente de tentar entender porque o fato de adicionar o atributo rendered faz com que o ajax deixe de funcionar e decidi por enquanto deixar todas as tabs aparecendo para poder continuar o desenvolvimento, mas aí me deparei com um outro problema: se eu tiver mais de uma tab, o ajax também não funciona.

Sempre ouvi dizer que, quand a solução parece impossível, é pq vc está fazendo algo errado, alguém poderia me dar pelo menos algumas dicas para eu tenta entender onde eu posso estar errando?

rponte

Oi Genos,

A primeira vista seu problema parece está relacionador com escopo conversacional dos managed beans. Qual o escopo do seu managed bean?

Apenas para efeitos de testes, tente passa-lo para o escopo de session e veja se o problema persiste.

Abraços e boa sorte.

G

Olá RPont… o escopo do bean já está em Session

Criado 6 de novembro de 2009
Ultima resposta 16 de nov. de 2009
Respostas 5
Participantes 3