[RESOLVIDO] <a4j:support reRender=""> Não estão funcionando

87 respostas
E

Bom dia pessoal,

andei lendo varios post e na maioria dizia que se vc quer ter um render dinamico, vc precisa renderizar o componente pai daquele componente a ser renderizando. Pensando nessa linha de raciocinio, eu estou tentando renderizar um panelgroup e n consegui. Tentei também com um a4j:outPanel e também não consegui. abaixo o código.

&lt;h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" &gt;
				&lt;a4j:support reRender="painel_orgao_externo" event="onclick" /&gt;
				&lt;/h:selectBooleanCheckbox&gt;
			
			
				&lt;h:panelGroup id="painel_orgao_externo" rendered="#{movimentacaoMBean.externo}"&gt;
				&lt;h:outputLabel value="Orgao externo" id="lb_orgaoexterno" /&gt;
				&lt;h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" &gt;
					  &lt;f:selectItem itemLabel="" /&gt;
						&lt;f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" /&gt;
					&lt;/h:selectOneMenu&gt;
				&lt;/h:panelGroup&gt;

Eu estou tentando renderizar o componente “painel_orgao_externo”, através de um selectbox. Alguém saberia porque não está funcionando ?

87 Respostas

R

esse rendered="#{movimentacaoMBean.externo}" tá true?

E

ele inicia false.

ele seria alterado conforme o evento “onclick” fosse chamado.

R

entendi…

então vc precisa de algo assim:

&lt;a4j:support reRender="painel_orgao_externo" event="onclick" actionListener="setaTrue" /&gt;

e no MB:

public void setaTrue(ActionEvent evt){
externo = true;
}
E

Não funfou não mano. =/

G

Você só pode fazer reRender em um componente que inicialmente está renderizado.
Ele precisa existir no HTML original (mesmo que seja um Panel vazio) para que as chamadas Ajax modifiquem o conteúdo.

A solução é criar um panel group PAI do painel_orgao_externo, sem o atributo rendered.

<h:panelGroup id="id_do_painel_pai"> <h:panelGroup id="painel_orgao_externo" rendered="#{movimentacaoMBean.externo}"> ... </h:panelGroup> </h:panelGroup>
Aí o componente Ajax faz reRender no id_do_painel_pai

Não sei se fui bem claro, qualquer coisa é só perguntar

E

fiz dessa forma e também não funcionou:

&lt;h:panelGroup &gt;
				&lt;h:outputLabel value="Externo"/&gt;
				&lt;h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" &gt;
				&lt;a4j:support reRender="painel_orgao_externo" event="onclick" /&gt;
				&lt;/h:selectBooleanCheckbox&gt;
			<br />
			
				&lt;h:panelGroup id="painel_orgao_externo" rendered="#{movimentacaoMBean.externo}"&gt;
				&lt;h:outputLabel value="Orgao externo" id="lb_orgaoexterno" /&gt;
				&lt;h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" &gt;
					  &lt;f:selectItem itemLabel="" /&gt;
						&lt;f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" /&gt;
					&lt;/h:selectOneMenu&gt;
				&lt;/h:panelGroup&gt;
			&lt;/h:panelGroup&gt;
L

O panelGroup tem algum bug ou alguma definição do Faces, que desconheço, no "rendered" dele, quanto à a4j.
Até funciona, na primeira renderização. Mas quando manda renderizar novamente, via a4j, ele não responde.

Sugiro o seguinte:
<h:panelGroup >  
                 <h:outputLabel value="Externo"/>  
                 <h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" >  
                 <a4j:support reRender="painel_orgao_externo" event="onclick" />  
                 </h:selectBooleanCheckbox>  
             <br />  
               
                 <h:panelGroup id="painel_orgao_externo">  
                 <h:outputLabel  rendered="#{movimentacaoMBean.externo}" value="Orgao externo" id="lb_orgaoexterno" />  
                 <h:selectOneMenu  rendered="#{movimentacaoMBean.externo}" value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" >  
                       <f:selectItem itemLabel="" />  
                         <f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" />  
                     </h:selectOneMenu>  
                 </h:panelGroup>  
             </h:panelGroup>

Coloca as condições do rendered no outputLabel e no selectOneMenu e continua com com o reRender do a4j:support apontando para o "painel_orgao_externo".

Abraço

Edit: também precisa acrescentar um método no actionListener do a4j:support, que vai setar "externo" para true ou false, de acordo à necessidade.

R

vc precisa de um actionListener no a4j:support
senão,como vc vai setar a variável ‘externo’ para true?

E

fiz dessa forma e tbm não funcionou:

&lt;h:panelGroup id="painel_orgao_pai"&gt;
				&lt;h:outputLabel value="Externo"/&gt;
				&lt;h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" &gt;
				&lt;a4j:support reRender="painel_orgao_externo" event="onclick"
				ajaxSingle="true" actionListener="#{movimentacaoMBean.setaTrue}"/&gt;
				&lt;/h:selectBooleanCheckbox&gt;
			    <br />
			
				   &lt;h:panelGroup id="painel_orgao_externo" &gt;
				      &lt;h:outputLabel value="Orgao externo" id="lb_orgaoexterno" rendered="#{movimentacaoMBean.externo}"/&gt;
				        &lt;h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" rendered="#{movimentacaoMBean.externo}" &gt;
					      &lt;f:selectItem itemLabel="" /&gt;
						  &lt;f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" /&gt;
					  &lt;/h:selectOneMenu&gt;
				&lt;/h:panelGroup&gt;
			&lt;/h:panelGroup&gt;

Onde o método setaTrue

public void setaTrue(ActionEvent evt){ 
		 this.externo = true;  
		}
L

Tem getter e setter para este externo?

Além disso, coloca ele em um t:saveState, assim:

<t:saveState value="#{movimentacaoMBean.externo}"/>

Vamos ver se funciona

E

tem sim.

public void setExterno(boolean externo) {
		this.externo = externo;
	}

	public boolean isExterno() {
		return externo;
	}

Vou testar utilizando o saveState do tomahawk.

E

coloquei o saveState…

e nada… novamente.

R

acho que resolvi aqui.
coloca reRender=“painel_orgao_pai”

G

O que eu estava dizendo era isso:

<h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" >  
                    <a4j:support reRender="painel_pai" event="onclick" />  
                   </h:selectBooleanCheckbox>  

                <h:panelGroup id="painel_pai">
                   <h:panelGroup id="painel_orgao_externo" rendered="#{movimentacaoMBean.externo}">  
                    <h:outputLabel value="Orgao externo" id="lb_orgaoexterno" />  
                    <h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" >  
                         <f:selectItem itemLabel="" />  
                           <f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" />  
                       </h:selectOneMenu>  
                   </h:panelGroup>
                </h:panelGroup>
Y

Boa tarde EuclidesFilizola;

O que está acontecendo é o seguinte, primeiro a sua pagina é montada sem o componente ‘painel_orgao_externo’ pois está com redered=false. Até ai tudo bem;
Então tu faz a modificação no checkbox e envia a requisição ajax, essa requisição ajax ira tentar dar um reRender no componente “painel_orgao_externo”, mas ele não existe(pq não foi renderizado) e ai é que encontra o problema, então tu tem que dar um reRender em um componente superior a ele, que ja tenha sido renderizado anteriormente.

E

fiz desta forma, e continua sem funcionar, ou seja, ao clicar no selectbox, nada acontece.

&lt;h:panelGroup id="painel_orgao_pai"&gt;
				&lt;h:outputLabel value="Externo"/&gt;
				&lt;h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" &gt;
				&lt;a4j:support reRender="painel_orgao_pai" event="onclick"
				ajaxSingle="true" action="#{movimentacaoMBean.setaTrue}"/&gt;
				&lt;/h:selectBooleanCheckbox&gt;
			    <br />
			
				   &lt;h:panelGroup id="painel_orgao_externo" &gt;
				      &lt;h:outputLabel value="Orgao externo" id="lb_orgaoexterno" rendered="#{movimentacaoMBean.externo}"/&gt;
				        &lt;h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" rendered="#{movimentacaoMBean.externo}" &gt;
					      &lt;f:selectItem itemLabel="" /&gt;
						  &lt;f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" /&gt;
					  &lt;/h:selectOneMenu&gt;
				&lt;/h:panelGroup&gt;
			&lt;/h:panelGroup&gt;
R

em vez de:

action="#{movimentacaoMBean.setaTrue}"

deve ser:

actionListener="#{movimentacaoMBean.setaTrue}"
R

retificando,testei aqui e tbm funciona com action.

vc debugou?tá entrando no método setaTrue ?

E

mesmo tendo mudado para actionListener, continua sem funcionar.

&lt;h:panelGroup id="painel_orgao_pai"&gt;
				&lt;h:outputLabel value="Externo"/&gt;
				&lt;h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" &gt;
				&lt;a4j:support reRender="painel_orgao_pai" event="onclick"
				ajaxSingle="true" actionListener="#{movimentacaoMBean.setaTrue}" /&gt;
				&lt;/h:selectBooleanCheckbox&gt;
			    <br />
			&lt;t:saveState value="#{movimentacaoMBean.externo}"/&gt;
				   &lt;h:panelGroup id="painel_orgao_externo" &gt;
				      &lt;h:outputLabel value="Orgao externo" id="lb_orgaoexterno" rendered="#{movimentacaoMBean.externo}"/&gt;
				        &lt;h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" rendered="#{movimentacaoMBean.externo}" &gt;
					      &lt;f:selectItem itemLabel="" /&gt;
						  &lt;f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" /&gt;
					  &lt;/h:selectOneMenu&gt;
				&lt;/h:panelGroup&gt;
			&lt;/h:panelGroup&gt;

método do MB:

public void setaTrue(ActionEvent evt){ 
		 this.setExterno(true);  
		}
E

debugando, ele não entra no método “setatrue” como falou o rafael.

alguem saberia me dizer o porquê ?

L

Repara que tu mandou renderizar um “painel_orgao_pai” e ele não existe!
No reRender tem que estar “painel_orgao_externo”.

R

aqui na minha maquina esse teu codigo ta funcionando…

debugou? tá entrando no setaTrue?

E

L.Bach:
Repara que tu mandou renderizar um “painel_orgao_pai” e ele não existe!
No reRender tem que estar “painel_orgao_externo”.

o painel orgao pai, está acima do orgao externo, por isso me indicaram reRender quem já foi renderizado na pagina, isso significa que, qndo eu entro nesta página, ele já traz o primeiro painel renderizado, o painel orgao pai. e o orgao externo, fica dentro do orgao pai. Veja:

<h:panelGroup id="painel_orgao_pai">

  .................. .. .. .

                <h:panelGroup id="painel_orgao_externo" >

		</h:panelGroup>
</h:panelGroup>
E

raf4ever:
aqui na minha maquina esse teu codigo ta funcionando…

debugou? tá entrando no setaTrue?

eu debbuguei aqui, e realmente ele não entra no setaTrue.

R

L.Bach:
Repara que tu mandou renderizar um “painel_orgao_pai” e ele não existe!
No reRender tem que estar “painel_orgao_externo”.

Como assim não existe?

<h:panelGroup id="painel_orgao_pai">
R

EuclidesFilizola:
raf4ever:
aqui na minha maquina esse teu codigo ta funcionando…

debugou? tá entrando no setaTrue?

eu debbuguei aqui, e realmente ele não entra no setaTrue.

esse código ta dentro de um h:form?

E

Está sim.

&lt;ui:composition template="/pages/layout.xhtml"&gt;
	&lt;ui:define name="conteudo"&gt;
		&lt;f:loadBundle basename="patrimonio.util.lb" var="lb" /&gt;
		&lt;h:form id="movimentacao_patrimonio"&gt;
R

coloca aqui o código completo dessa página.

Y

Com F:ajax

<h:form prependId="false" id="form1">
			<h:panelGroup id="painel_orgao_pai">   
            <h:outputLabel value="Externo"/>   
            <h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" >
            	<f:ajax event="change" execute="@form" render="form1"/>
            </h:selectBooleanCheckbox>   
            <br/> 
               <h:panelGroup id="painel_orgao_externo" >   
                  <h:outputText value="Orgao externo" rendered="#{movimentacaoMBean.externo}"/>
            </h:panelGroup>   
        </h:panelGroup> 
	</h:form>

Fique atento aos seguintes pontos.
Tu não precisa de um listener setaTrue, a propria seleção do checkbox ira alternar o valor de externo tendo em vista que eles estao ligados.
Por causa disso é aconselhavel que tu reRenderize o checkbox também para evitar que eles fiquem fora de sincronia
Um evento onchange acho que iria manipular melhor esta ação do que um evento onclick.
E não esqueca de verificar como está o escopo do Mb

E
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:t="http://myfaces.apache.org/tomahawk"&gt;

&lt;ui:composition template="/pages/layout.xhtml"&gt;
	&lt;ui:define name="conteudo"&gt;
		&lt;f:loadBundle basename="patrimonio.util.lb" var="lb" /&gt;
		&lt;h:form id="movimentacao_patrimonio"&gt;
		
		&lt;strong&gt; &lt;h:outputText value="Movimentar Patrimonio"/&gt;  &lt;/strong&gt;
		&lt;hr /&gt;
		&lt;h:panelGrid columns="2"&gt;
        		&lt;h:outputText value="Patrimonio"/&gt;
        		&lt;h:inputText value="#{movimentacaoMBean.patrimonio.notaFiscalBens.codBem.dsMaterial}" readonly="true"/&gt;
        		&lt;h:outputText value="Plaqueta"/&gt;
        		&lt;h:inputText value="#{movimentacaoMBean.patrimonio.plaqueta.cdPlaqueta}" readonly="true"/&gt;
        		&lt;h:outputText value="Setor Atual"/&gt;
        		&lt;h:inputText value="#{movimentacaoMBean.setorAtual}" readonly="true"/&gt;
        		&lt;h:outputText value="Setor para movimentacao"/&gt;
        		&lt;h:selectOneMenu value="#{movimentacaoMBean.setor.cdSetor}" id="codSetor"&gt;
					  &lt;f:selectItem itemLabel="" /&gt;
						&lt;f:selectItems value="#{movimentacaoMBean.listaDeTdsSetores}" /&gt;
					&lt;/h:selectOneMenu&gt;
					
				&lt;h:panelGroup id="painel_orgao_pai"&gt;
				&lt;h:outputLabel value="Externo"/&gt;
				&lt;h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" &gt;
				[b]&lt;a4j:support reRender="painel_orgao_pai" event="onclick"
				ajaxSingle="true" actionListener="#{movimentacaoMBean.setaTrue}" /&gt;[/b]
				&lt;/h:selectBooleanCheckbox&gt;
			    <br />
		
				  [b] &lt;h:panelGroup id="painel_orgao_externo" &gt;
				      &lt;h:outputLabel value="Orgao externo" id="lb_orgaoexterno" rendered="#{movimentacaoMBean.externo}"/&gt;
				        &lt;h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" rendered="#{movimentacaoMBean.externo}" &gt;
					      &lt;f:selectItem itemLabel="" /&gt;
						  &lt;f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" /&gt;
					  &lt;/h:selectOneMenu&gt;
				&lt;/h:panelGroup&gt;[/b]
			&lt;/h:panelGroup&gt;
				
				&lt;t:saveState value="#{movimentacaoMBean.patrimonio}"/&gt;
				&lt;h:commandButton action="#{movimentacaoMBean.movimentarPatrimonio}" value="Movimentar"/&gt;
        	&lt;/h:panelGrid&gt;

        		

		&lt;hr/&gt;
		&lt;/h:form&gt;
		
		&lt;h:form id="tabela_movimentacao_patrimonio"&gt;
		
		&lt;f:facet name="titulo"&gt;
            &lt;h:panelGroup&gt;
                &lt;h:outputText value="Movimentacoes Cadastradas"&gt;&lt;/h:outputText&gt;
            &lt;/h:panelGroup&gt;
        &lt;/f:facet&gt;
	&lt;rich:dataTable id="tabelaMovimentacaoPatrimonio" style="cursor:pointer;" value="#{movimentacaoMBean.listaMovimentacoesPorPatrimonio}" var="listMovimentacao" onRowMouseOver="this.style.backgroundColor='#C9FDC1'"
				onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'" cellpadding="0" cellspacing="0" rows="10" &gt;
				&lt;f:facet name="header" &gt;
				 &lt;rich:columnGroup&gt;
				 	&lt;h:column &gt; &lt;h:outputText value="Setor" /&gt; &lt;/h:column&gt;
				 	&lt;h:column &gt; &lt;h:outputText value="Bem" /&gt; &lt;/h:column&gt;
				 	&lt;h:column &gt; &lt;h:outputText value="Data de entrada" /&gt; &lt;/h:column&gt;
				 	&lt;h:column &gt; &lt;h:outputText value="Data de saida" /&gt; &lt;/h:column&gt;
				 	
				 &lt;/rich:columnGroup&gt;
				&lt;/f:facet&gt;
				
				&lt;h:column &gt; &lt;h:outputText value="#{listMovimentacao.setor.siglaSetor}"/&gt; &lt;/h:column&gt;
				&lt;h:column &gt; &lt;h:outputText value="#{listMovimentacao.patrimonio.notaFiscalBens.codBem.dsMaterial}"/&gt; &lt;/h:column&gt;
				&lt;h:column &gt; &lt;h:outputText value="#{listMovimentacao.dataEntrada}"/&gt; &lt;/h:column&gt;
				&lt;h:column &gt; &lt;h:outputText value="#{listMovimentacao.dataSaida}"/&gt; &lt;/h:column&gt;
				
				&lt;/rich:dataTable&gt;
		
		&lt;/h:form&gt;
		
&lt;/ui:define&gt;

	&lt;/ui:composition&gt;

&lt;/html&gt;
R

Bem,vamos diminuir as possibilidades de erro.

Deixa nessa página apenas o código que interessa por enquanto.

E

eu deixei dessa forma, e tbm n funcionou.

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:t="http://myfaces.apache.org/tomahawk"&gt;

&lt;ui:composition template="/pages/layout.xhtml"&gt;
	&lt;ui:define name="conteudo"&gt;
		&lt;f:loadBundle basename="br.gov.ce.srh.patrimonio.util.lb" var="lb" /&gt;
		&lt;h:form id="movimentacao_patrimonio"&gt;
		
		
				&lt;h:panelGroup id="painel_orgao_pai"&gt;
				&lt;h:outputLabel value="Externo"/&gt;
				&lt;h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" &gt;
				&lt;a4j:support reRender="painel_orgao_pai" event="onclick"
				ajaxSingle="true" actionListener="#{movimentacaoMBean.setaTrue}" /&gt;
				&lt;/h:selectBooleanCheckbox&gt;
			    <br />
		
				   &lt;h:panelGroup id="painel_orgao_externo" &gt;
				      &lt;h:outputLabel value="Orgao externo" id="lb_orgaoexterno" rendered="#{movimentacaoMBean.externo}"/&gt;
				        &lt;h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" rendered="#{movimentacaoMBean.externo}" &gt;
					      &lt;f:selectItem itemLabel="" /&gt;
						  &lt;f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" /&gt;
					  &lt;/h:selectOneMenu&gt;
				&lt;/h:panelGroup&gt;
			&lt;/h:panelGroup&gt;
				
		
		
		&lt;/h:form&gt;
		
&lt;/ui:define&gt;

	&lt;/ui:composition&gt;

&lt;/html&gt;
Y

Tire o setaTrue e mude o evento para onchange.

E

nada acontece.

:frowning:

Y

:shock:

Modifica para <f:ajax> como eu postei anteriormente apenas para teste.

Aqui funciona perfeitamente.

ps: mude o formulario para <h:form id=“movimentacao_patrimonio” prependId=“false”>

G

Na verdade ao trabalhar com Ajax o melhor é usar o a4j:form

E

tentei desta forma:

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:t="http://myfaces.apache.org/tomahawk"&gt;

&lt;ui:composition template="/pages/layout.xhtml"&gt;
	&lt;ui:define name="conteudo"&gt;
		&lt;f:loadBundle basename="br.gov.ce.srh.patrimonio.util.lb" var="lb" /&gt;
		&lt;h:form id="movimentacao_patrimonio" prependId="false"&gt;
		
		
				&lt;h:panelGroup id="painel_orgao_pai"&gt;
				&lt;h:outputLabel value="Externo"/&gt;
				&lt;h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" &gt;
				&lt;f:ajax event="change" execute="@movimentacao_patrimonio" render="painel_orgao_pai"/&gt; 
				
				&lt;/h:selectBooleanCheckbox&gt;
			    <br />
		
				   &lt;h:panelGroup id="painel_orgao_externo" &gt;
				      &lt;h:outputLabel value="Orgao externo" id="lb_orgaoexterno" rendered="#{movimentacaoMBean.externo}"/&gt;
				        &lt;h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" rendered="#{movimentacaoMBean.externo}" &gt;
					      &lt;f:selectItem itemLabel="" /&gt;
						  &lt;f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" /&gt;
					  &lt;/h:selectOneMenu&gt;
				&lt;/h:panelGroup&gt;
			&lt;/h:panelGroup&gt;
				
		
		
		&lt;/h:form&gt;
		
&lt;/ui:define&gt;

	&lt;/ui:composition&gt;

&lt;/html&gt;

e da o seguinte erro:

GRAVE: Error Rendering View[/pages/MovimentarPatrimonio.xhtml]
com.sun.facelets.tag.TagException: /pages/MovimentarPatrimonio.xhtml @19,90 &lt;f:ajax&gt; Tag Library supports namespace: http://java.sun.com/jsf/core, but no tag was defined for name: ajax
	at com.sun.facelets.compiler.CompilationManager.pushTag(CompilationManager.java:193)
	at com.sun.facelets.compiler.SAXCompiler$CompilationHandler.startElement(SAXCompiler.java:194)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.emptyElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
	at javax.xml.parsers.SAXParser.parse(Unknown Source)
	at javax.xml.parsers.SAXParser.parse(Unknown Source)
	at com.sun.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:232)
	at com.sun.facelets.compiler.Compiler.compile(Compiler.java:104)
	at com.sun.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:192)
	at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:141)
	at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:93)
	at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:503)
	at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:553)
	at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
	at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:510)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:341)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
	at java.lang.Thread.run(Unknown Source)
R

f:ajax não eh só a partir do JSF 2.0?

Y

Bahh é sim, não tinha me tocado para este pequeno detalhe :S

E

Alguem poderia me dar alguma solução ?

mudar para javascript ? utilizar algum outro componente ? algo relacionado ?

R

Bahh é sim, não tinha me tocado para este pequeno detalhe :S

:smiley:

Mas tá estranho isso…

Exemplo de código que eu fiz q funciona:

&lt;ui:composition 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:a4j="http://richfaces.org/a4j"
      xmlns:t="http://myfaces.apache.org/tomahawk"
      xmlns:rich="http://richfaces.org/rich"&gt;

   &lt;h:form&gt;
     &lt;h:panelGroup id="painel_orgao_pai"&gt;  
                &lt;h:outputLabel value="Externo"/&gt;  
                &lt;h:selectBooleanCheckbox  id="id_externo" value="#{bean.certo}" &gt;  
                &lt;a4j:support reRender="painel_orgao_pai" event="onclick"  
                ajaxSingle="true" /&gt;  
                &lt;/h:selectBooleanCheckbox&gt;  
                <br/>  
             
                   &lt;h:panelGroup id="painel_orgao_externo" &gt;  
                     &lt;h:outputLabel value="Orgao externo" id="lb_orgaoexterno" rendered="#{bean.certo}"/&gt;  
                   &lt;/h:panelGroup&gt;  
           &lt;/h:panelGroup&gt;  
   
   &lt;/h:form&gt;
&lt;/ui:composition&gt;

Mb:

package teste;
public class Bean {
	boolean certo;
	public boolean isCerto() {
		return certo;
	}

	public void setCerto(boolean certo) {
		this.certo = certo;
	}
	
	

	
}
E

Não vejo quase nenhuma diferença do código postado…

&lt;h:form id="movimentacao_patrimonio" prependId="false"&gt;
		
		
				&lt;h:panelGroup id="painel_orgao_pai"&gt;
				&lt;h:outputLabel value="Externo"/&gt;
				&lt;h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" &gt;
				&lt;a4j:support reRender="painel_orgao_pai" event="onclick"
				ajaxSingle="true"  /&gt;
				&lt;/h:selectBooleanCheckbox&gt;
			    <br />
		
				   &lt;h:panelGroup id="painel_orgao_externo" &gt;
				      &lt;h:outputLabel value="Orgao externo" id="lb_orgaoexterno" rendered="#{movimentacaoMBean.externo}"/&gt;
				        &lt;h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" rendered="#{movimentacaoMBean.externo}" &gt;
					      &lt;f:selectItem itemLabel="" /&gt;
						  &lt;f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" /&gt;
					  &lt;/h:selectOneMenu&gt;
				&lt;/h:panelGroup&gt;
			&lt;/h:panelGroup&gt;
				
		
		
		&lt;/h:form&gt;

R

por acaso,esse teu layout.xhtml tem algum h:form dentro dele?

E

Não tem não Rafael.

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:rich="http://richfaces.org/rich"&gt;
    &lt;head&gt;  
    	&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&gt;
    	&lt;link href="/SistemaPatrimonio/css/estilo.css" rel="stylesheet" type="text/css"/&gt;
    	&lt;script type="text/javascript" src="/SistemaPatrimonio/js/funcao_tab.js"&gt;&lt;/script&gt;
    	&lt;script type="text/javascript" src="/SistemaPatrimonio/js/javascript.js"&gt;&lt;/script&gt;
    	
    &lt;/head&gt;

	&lt;body class="twoColElsLtHdr"&gt;
		&lt;div id="container"&gt;
			&lt;div id="header"&gt;
			    &lt;h1&gt;<img />&lt;/h1&gt;
			 &lt;/div&gt;
			  &lt;div id="sidebar1" &gt;
			    &lt;h3&gt;&lt;ui:include src="/pages/menu.xhtml"/&gt;&lt;/h3&gt;
			 &lt;/div&gt;
			 &lt;div id="mainContent"&gt;
			 	&lt;ui:insert name="conteudo"&gt;&lt;/ui:insert&gt;	
			 &lt;/div&gt;	
			 &lt;rich:spacer height="39" /&gt;
			 &lt;div id="footer"&gt;
			 <br /><br />
			 &lt;hr /&gt;<br/>
			

			 &lt;/div&gt;
		&lt;/div&gt;
	&lt;/body&gt;

&lt;/html&gt;
R

deixa eu ver o código do movimentacaoMBean

Y

Isso ta muito estranho. O Seu mb está ok? getters e setters…
Por via das duvidas preenche ou deleta essa linha…
<f:selectItem itemLabel="" />

T

Olha só eu li na página do myfaces sobre o uso de rendered em componentes atualizados via ajax, vai parecer meio estranho mas testa da seguinte maneira

<h:outputLabel value="Externo"/>  
                 <h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" >  
                 <a4j:support reRender="painel_orgao_pai" event="onclick"  
                 ajaxSingle="true"  />  
                 </h:selectBooleanCheckbox> 

<h:panelGorup id="painel_orgao_pai">
    <h:panelGorup id="painel1" rendered="#{mBean.rendered}">
    </h:panelGroup>
</h:panelGroup>

Testa aí.
A explicação é que o componente que você está tentando exibir, ele inicialmente não existe na árvore HTML pois, não foi renderizado, então essa é a solução apresentada (uma outra seria tirar o atributo rendered do panelGroup e colocar em cada um dos elementos, conviniente quando você tem 2, 3 componentes dentro do panel, mais inviável quando se tem dezenas deles)

E

Ygor:
Isso ta muito estranho. O Seu mb está ok? getters e setters…
Por via das duvidas preenche ou deleta essa linha…
<f:selectItem itemLabel="" />

eu fiz das duas formas, tanto preenchendo, como deletando e não funcionou …

thiago.correa:
Olha só eu li na página do myfaces sobre o uso de rendered em componentes atualizados via ajax, vai parecer meio estranho mas testa da seguinte maneira

<h:outputLabel value="Externo"/>  
                 <h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" >  
                 <a4j:support reRender="painel_orgao_pai" event="onclick"  
                 ajaxSingle="true"  />  
                 </h:selectBooleanCheckbox> 

<h:panelGorup id="painel_orgao_pai">
    <h:panelGorup id="painel1" rendered="#{mBean.rendered}">
    </h:panelGroup>
</h:panelGroup>

Testa aí.
A explicação é que o componente que você está tentando exibir, ele inicialmente não existe na árvore HTML pois, não foi renderizado, então essa é a solução apresentada (uma outra seria tirar o atributo rendered do panelGroup e colocar em cada um dos elementos, conviniente quando você tem 2, 3 componentes dentro do panel, mais inviável quando se tem dezenas deles)

fiz +/- oq vc disse, de acordo com o código abaixo:

<h:panelGroup id="painel_orgao_pai" >
				<h:outputLabel value="Externo"/>
				<h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" >
				<a4j:support reRender="painel_orgao_pai" event="onclick"
				ajaxSingle="true"  />
				</h:selectBooleanCheckbox>
			    <br />
		
				   <h:panelGroup id="painel_orgao_externo"  rendered="#{movimentacaoMBean.externo}">
				      <h:outputLabel value="Orgao externo" id="lb_orgaoexterno"/>
				        <h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" >
					      
						  <f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" />
					  </h:selectOneMenu>
				</h:panelGroup>
		</h:panelGroup>

e também não funcionou !!!

R

posta ai o código do MB

T

Tenta o event=“onchange” ao invés de event=“onclick”

E
public class MovimentacaoMBean {

	private Patrimonio patrimonio = new Patrimonio();
	private Movimentacao movimentacao = new Movimentacao();
	private UltimaMovimentacao ultimaMovimentacao = new UltimaMovimentacao();
	private Setor setor = new Setor();
	private Setor SetorAtual = new Setor();
	private OrgaoExterno orgaoExterno = new OrgaoExterno();
	private boolean externo;
	private SetorDAO setorDao = new SetorDAO();
	private PatrimonioDAO patrimonioDao = new PatrimonioDAO();
	private MovimentacaoDAO movimentacaoDao = new MovimentacaoDAO();
	private UltimaMovimentacaoDAO ultimaMoviDAO = new UltimaMovimentacaoDAO();
	private OrgaoExternoDAO orgaoDao = new OrgaoExternoDAO();
	private List&lt;Movimentacao&gt; listaMovimentacoesPorPatrimonio = new ArrayList&lt;Movimentacao&gt;();
	private List&lt;SelectItem&gt; listaDeTdsSetores = new ArrayList&lt;SelectItem&gt;();
	private List&lt;SelectItem&gt; listaDeOrgsExternos = new ArrayList&lt;SelectItem&gt;();
	

	
	public MovimentacaoMBean() {
		
	}
	
............
......................
..............................
......................................


	public void setExterno(boolean externo) {
		this.externo = externo;
	}

	public boolean isExterno() {
		return externo;
	}
E

thiago.correa:
Tenta o event=“onchange” ao invés de event=“onclick”

já mudei para o onchange, e não funciona !

T

Mas ele faz a requisição até o MBean tudo certinho?!

R

qual o escopo desse bean no faces-config?

T

cara faz assim, coloca na tua página o seguinte

<a4j:outputPanel ajaxRendered="true">
<h:messages showDetail="true" />
</a4j:outputPanel>
T

Consegui,

segue os arquivos

jsp

<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 
      <%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
      <%@taglib uri="http://richfaces.org/a4j" prefix="a4j" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  
  <body>
	<f:view>
		<a4j:outputPanel ajaxRendered="true">
			<h:messages showDetail="true"/>
		</a4j:outputPanel>
		
         <h:form id="movimentacao_patrimonio">             
           
                 <h:panelGroup id="painel_orgao_pai">  
                 <h:outputLabel value="Externo"/>  
                 <h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" >  
                 <a4j:support reRender="painel_orgao_pai" event="onclick"  
                 	ajaxSingle="true" action="#{movimentacaoMBean.showExterno}" />  
                 </h:selectBooleanCheckbox>  
                 <br />  
           
                    <h:panelGroup id="painel_orgao_externo" rendered="#{movimentacaoMBean.externo}">  
                       <h:outputLabel value="Orgao externo" id="lb_orgaoexterno" />  
                         <h:selectOneMenu value="#{movimentacaoMBean.codOrgao}" id="codOrgao" >  
                           <f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" />  
                       </h:selectOneMenu>  
                 </h:panelGroup>  
             </h:panelGroup>  
                   
           <h:commandButton action="#{movimentacaoMBean.envia}" />
           
         </h:form>  	
	</f:view>
  </body>
</html>

java

import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

public class MovimentacaoMBean {

	private boolean externo;
	private List<SelectItem> listaDeOrgsExternos =  new ArrayList<SelectItem>();;
	private int codOrgao;

	public List<SelectItem> getListaDeOrgsExternos() {
		listaDeOrgsExternos.add(new SelectItem("1", "Orgão Externo 1"));
		listaDeOrgsExternos.add(new SelectItem("2", "Orgão Externo 2"));
		listaDeOrgsExternos.add(new SelectItem("3", "Orgão Externo 3"));
		listaDeOrgsExternos.add(new SelectItem("4", "Orgão Externo 4"));
		
		
		return listaDeOrgsExternos;
	}

	public void setListaDeOrgsExternos(List<SelectItem> listaDeOrgsExternos) {
		this.listaDeOrgsExternos = listaDeOrgsExternos;
	}


	public void showExterno() {
		System.out.println("is externo: " + externo);
	}

	public void setExterno(boolean externo) {
		this.externo = externo;
	}

	public boolean isExterno() {
		return externo;
	}

	public int getCodOrgao() {
		return codOrgao;
	}

	public void setCodOrgao(int codOrgao) {
		this.codOrgao = codOrgao;
	}
	
	
	
	public String envia() {
		System.out.println(codOrgao);
		return null;
	}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">

	<display-name>app</display-name>

	<context-param>

		<param-name>javax.faces.CONFIG_FILES</param-name>

		<param-value>/WEB-INF/faces-config.xml</param-value>

	</context-param>

	<context-param>

		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>

		<param-value>server</param-value>

	</context-param>

	<servlet>

		<servlet-name>Faces Servlet</servlet-name>

		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

		<load-on-startup>1</load-on-startup>

	</servlet>

	<servlet-mapping>

		<servlet-name>Faces Servlet</servlet-name>

		<url-pattern>*.jsf</url-pattern>

	</servlet-mapping>

	<login-config>

		<auth-method>BASIC</auth-method>

	</login-config>

	<filter>

		<display-name>RichFaces Filter</display-name>

		<filter-name>richfaces</filter-name>

		<filter-class>org.ajax4jsf.Filter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>richfaces</filter-name>
		<servlet-name>Faces Servlet</servlet-name>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
	</filter-mapping>
</web-app>

faces-config

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
                              "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>
	<managed-bean>
		<managed-bean-name>movimentacaoMBean</managed-bean-name>
		<managed-bean-class>MovimentacaoMBean</managed-bean-class>
		<managed-bean-scope>request</managed-bean-scope>
	</managed-bean>
</faces-config>

Tentei usar o mesmo modelo que você fez, e funcionou perfeito, dá uma comparada e vê o que pode ser que esteja dando errado, qualquer coisa pode perguntar

R

thiago,
qual o propósito desse trecho?

&lt;a4j:outputPanel ajaxRendered="true"&gt;  
            &lt;h:messages showDetail="true"/&gt;  
        &lt;/a4j:outputPanel&gt;

abraços.

R

resolvido então??

T

raf4ever:
thiago,
qual o propósito desse trecho?

&lt;a4j:outputPanel ajaxRendered="true"&gt;  
            &lt;h:messages showDetail="true"/&gt;  
        &lt;/a4j:outputPanel&gt;

abraços.

Como está sendo feita uma requisição Ajax, o JSF não tem como atualizar a página indicando um erro, então, coloca-se esse outputPanel pois ele pode ser renderizado via ajax, e mostrar os erros que acontecem ao tentar submeter aquela requisição!

T

Eu até faria uma melhoria no meu código, ao invés de popular a lista no método getListaDeOrgsExternos eu colocaria no showExterno, ficaria assim

public  List<SelectItem> getListaDeOrgsExternos() {  
         return listaDeOrgsExternos;  
     }  
   
 
     public void showExterno() {  
         if (listaDeOrgsExternos == null || !listaDeOrgsExternos.isEmpty()) {
                  listaDeOrgsExternos = new ArrayList<SelectItem>();
         }

         listaDeOrgsExternos.add(new SelectItem("1", "Orgão Externo 1"));  
         listaDeOrgsExternos.add(new SelectItem("2", "Orgão Externo 2"));  
         listaDeOrgsExternos.add(new SelectItem("3", "Orgão Externo 3"));  
         listaDeOrgsExternos.add(new SelectItem("4", "Orgão Externo 4"));  

         System.out.println("is externo: " + externo);  
     }

Agora sim :smiley:

R

thiago.correa:
raf4ever:
thiago,
qual o propósito desse trecho?

&lt;a4j:outputPanel ajaxRendered="true"&gt;  
            &lt;h:messages showDetail="true"/&gt;  
        &lt;/a4j:outputPanel&gt;

abraços.

Como está sendo feita uma requisição Ajax, o JSF não tem como atualizar a página indicando um erro, então, coloca-se esse outputPanel pois ele pode ser renderizado via ajax, e mostrar os erros que acontecem ao tentar submeter aquela requisição!

legal…interessante…

E

o esco do mb é request.

coloquei o

&lt;a4j:outputPanel ajaxRendered="true"&gt;    
             &lt;h:messages showDetail="true"/&gt;    
         &lt;/a4j:outputPanel&gt;

e não apareceu erro nenhum quando eu clico no selectBox.

T

Na página 4 fiz um exemplo que funcionou, dá uma olhada e vê se te atende

O link é:
http://www.guj.com.br/posts/list/45/218579.java#1117224

E

eu criei o método “showExterno” conforme o thiago.correa mostrou o código que funcionou com ele.

bem, não funcionou nada, não mostrou erro de ajax, n renderizou …

dae eu fiz um debbug.

e advinhem ?

isso msm…

nada acontece, ele n entra no método “showExterno”

&lt;h:panelGroup id="painel_orgao_pai" &gt;
				&lt;h:outputLabel value="Externo"/&gt;
				&lt;h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" &gt;
				&lt;a4j:support reRender="painel_orgao_pai" event="onclick"
				ajaxSingle="true"  action="#{movimentacaoMBean.showExterno}"/&gt;
				&lt;/h:selectBooleanCheckbox&gt;
			    <br />
		
				   &lt;h:panelGroup id="painel_orgao_externo"  rendered="#{movimentacaoMBean.externo}"&gt;
				      &lt;h:outputLabel value="Orgao externo" id="lb_orgaoexterno"/&gt;
				        &lt;h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" &gt;
					      &lt;f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" /&gt;
					  &lt;/h:selectOneMenu&gt;
				&lt;/h:panelGroup&gt;
		&lt;/h:panelGroup&gt;

MB

public void showExterno() {  
		         System.out.println("is externo: " + externo);  
		     }

… saberiam me explicar ?

E

aqui está meu web.xml para vocês darem uma olhada.

&lt;display-name&gt;SistemaPatrimonio&lt;/display-name&gt;
 &lt;context-param&gt;
  &lt;param-name&gt;org.richfaces.SKIN&lt;/param-name&gt;
  &lt;param-value&gt;emeraldTown&lt;/param-value&gt;
 &lt;/context-param&gt;
 &lt;context-param&gt;
  &lt;param-name&gt;org.richfaces.CONTROL_SKINNING&lt;/param-name&gt;
  &lt;param-value&gt;enable&lt;/param-value&gt;
 &lt;/context-param&gt;
 &lt;context-param&gt;
  &lt;param-name&gt;org.ajax4jsf.VIEW_HANDLERS&lt;/param-name&gt;
  &lt;param-value&gt;com.sun.facelets.FaceletViewHandler&lt;/param-value&gt;
 &lt;/context-param&gt;
 &lt;context-param&gt;
  &lt;param-name&gt;org.ajax4jsf.SKIN&lt;/param-name&gt;
  &lt;param-value&gt;classic&lt;/param-value&gt;
 &lt;/context-param&gt;
 &lt;context-param&gt;
  &lt;param-name&gt;javax.faces.DEFAULT_SUFFIX&lt;/param-name&gt;
  &lt;param-value&gt;.xhtml&lt;/param-value&gt;
 &lt;/context-param&gt;
 &lt;context-param&gt;
  &lt;param-name&gt;facelets.REFRESH_PERIOD&lt;/param-name&gt;
  &lt;param-value&gt;2&lt;/param-value&gt;
 &lt;/context-param&gt;
 &lt;context-param&gt;
  &lt;param-name&gt;facelets.DEVELOPMENT&lt;/param-name&gt;
  &lt;param-value&gt;true&lt;/param-value&gt;
 &lt;/context-param&gt;
 &lt;context-param&gt;
  &lt;param-name&gt;javax.faces.STATE_SAVING_METHOD&lt;/param-name&gt;
  &lt;param-value&gt;server&lt;/param-value&gt;
 &lt;/context-param&gt;
 &lt;context-param&gt;
  &lt;param-name&gt;com.sun.faces.validateXml&lt;/param-name&gt;
  &lt;param-value&gt;true&lt;/param-value&gt;
 &lt;/context-param&gt;
 &lt;context-param&gt;
  &lt;param-name&gt;com.sun.faces.verifyObjects&lt;/param-name&gt;
  &lt;param-value&gt;true&lt;/param-value&gt;
 &lt;/context-param&gt;
 &lt;!-- CONFIGURAÇÃO TOMAHAWK  --&gt;
 &lt;filter&gt;
  &lt;filter-name&gt;MyFacesExtensionsFilter&lt;/filter-name&gt;
  &lt;filter-class&gt;org.apache.myfaces.webapp.filter.ExtensionsFilter&lt;/filter-class&gt;
  &lt;init-param&gt;
   &lt;param-name&gt;uploadMaxFileSize&lt;/param-name&gt;
   &lt;param-value&gt;20m&lt;/param-value&gt;
  &lt;/init-param&gt;
 &lt;/filter&gt;
 &lt;!-- CONFIGURAÇÃO RICHFACES --&gt;
 &lt;filter&gt;
  &lt;display-name&gt;RichFaces Filter&lt;/display-name&gt;
  &lt;filter-name&gt;richfaces&lt;/filter-name&gt;
  &lt;filter-class&gt;org.ajax4jsf.Filter&lt;/filter-class&gt;
 &lt;/filter&gt;
 &lt;filter&gt;
  &lt;display-name&gt;Ajax4jsf Filter&lt;/display-name&gt;
  &lt;filter-name&gt;ajax4jsf&lt;/filter-name&gt;
  &lt;filter-class&gt;org.ajax4jsf.Filter&lt;/filter-class&gt;
 &lt;/filter&gt;
 &lt;filter&gt;
  &lt;display-name&gt;LoginFilter&lt;/display-name&gt;
  &lt;filter-name&gt;LoginFilter&lt;/filter-name&gt;
  &lt;filter-class&gt;patrimonio.filtros.LoginFilter&lt;/filter-class&gt;
 &lt;/filter&gt;
 &lt;filter-mapping&gt;
  &lt;filter-name&gt;MyFacesExtensionsFilter&lt;/filter-name&gt;
  &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
 &lt;/filter-mapping&gt;
 &lt;filter-mapping&gt;
  &lt;filter-name&gt;MyFacesExtensionsFilter&lt;/filter-name&gt;
  &lt;url-pattern&gt;/faces/myFacesExtensionResource/*&lt;/url-pattern&gt;
 &lt;/filter-mapping&gt;
 &lt;filter-mapping&gt;
  &lt;filter-name&gt;richfaces&lt;/filter-name&gt;
  &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
  &lt;dispatcher&gt;REQUEST&lt;/dispatcher&gt;
  &lt;dispatcher&gt;FORWARD&lt;/dispatcher&gt;
  &lt;dispatcher&gt;INCLUDE&lt;/dispatcher&gt;
 &lt;/filter-mapping&gt;
 &lt;filter-mapping&gt;
  &lt;filter-name&gt;ajax4jsf&lt;/filter-name&gt;
  &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
  &lt;dispatcher&gt;REQUEST&lt;/dispatcher&gt;
  &lt;dispatcher&gt;FORWARD&lt;/dispatcher&gt;
  &lt;dispatcher&gt;INCLUDE&lt;/dispatcher&gt;
 &lt;/filter-mapping&gt;
 &lt;filter-mapping&gt;
  &lt;filter-name&gt;LoginFilter&lt;/filter-name&gt;
  &lt;url-pattern&gt;/LoginFilter&lt;/url-pattern&gt;
 &lt;/filter-mapping&gt;
 &lt;servlet&gt;
  &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
  &lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;
  &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
 &lt;/servlet&gt;
 &lt;servlet&gt;
  &lt;servlet-name&gt;Registro Geral&lt;/servlet-name&gt;
  &lt;servlet-class&gt;patrimonio.relatorio.RegistroGeralBens&lt;/servlet-class&gt;
 &lt;/servlet&gt;
 &lt;servlet-mapping&gt;
  &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
  &lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;
 &lt;/servlet-mapping&gt;
 &lt;servlet-mapping&gt;
  &lt;servlet-name&gt;Registro Geral&lt;/servlet-name&gt;
  &lt;url-pattern&gt;/report&lt;/url-pattern&gt;
 &lt;/servlet-mapping&gt;
 &lt;login-config&gt;
  &lt;auth-method&gt;BASIC&lt;/auth-method&gt;
 &lt;/login-config&gt;
&lt;/web-app&gt;
T

O teu web.xml tá configurado conforme o exemplo que eu postei?!

Só por desencargo de conciência, vou colocar as libs que eu utilizei:

commons-beanutils-1.7.0.jar
commons-collections-3.2.jar
commons-digester-1.8.jar
commons-logging-1.0.3.jar
jsf-api-1.1_02.jar
jsf-impl-1.1_02.jar
jstl-1.0.jar
log4j-1.2.14.jar
richfaces-api-3.1.6.SR1.jar
richfaces-impl-3.1.6.SR1.jar
richfaces-ui-3.1.6.SR1.jar
slf4j-api-1.5.8.jar
slf4j-log4j12-1.5.8.jar

E

thiago.correa:
Na página 4 fiz um exemplo que funcionou, dá uma olhada e vê se te atende

O link é:
http://www.guj.com.br/posts/list/45/218579.java#1117224

eu fiz quase “identico” que vc. Só muda a lista que é diferente, o resto é igual. E continua sem funcionar.

vai codigo abaixo:

<!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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:t="http://myfaces.apache.org/tomahawk">

<ui:composition template="/pages/layout.xhtml">
	<ui:define name="conteudo">
		<f:loadBundle basename="br.gov.ce.srh.patrimonio.util.lb" var="lb" />
		
		 <a4j:outputPanel ajaxRendered="true">    
             <h:messages showDetail="true"/>    
         </a4j:outputPanel> 
         
         
		<h:form id="movimentacao_patrimonio" >
		
		
				<h:panelGroup id="painel_orgao_pai" >
				<h:outputLabel value="Externo"/>
				<h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" >
				<a4j:support reRender="painel_orgao_pai" event="onclick"
				ajaxSingle="true"  action="#{movimentacaoMBean.showExterno}"/>
				</h:selectBooleanCheckbox>
			    <br />
		
				   <h:panelGroup id="painel_orgao_externo"  rendered="#{movimentacaoMBean.externo}">
				      <h:outputLabel value="Orgao externo" id="lb_orgaoexterno"/>
				        <h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" >
					      <f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" />
					  </h:selectOneMenu>
				</h:panelGroup>
		</h:panelGroup>
				
		
		
		</h:form>
		
</ui:define>

	</ui:composition>

</html>

MB

package br.gov.ce.srh.patrimonio.faces;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import br.gov.ce.srh.patrimonio.dao.MovimentacaoDAO;
import br.gov.ce.srh.patrimonio.dao.OrgaoExternoDAO;
import br.gov.ce.srh.patrimonio.dao.PatrimonioDAO;
import br.gov.ce.srh.patrimonio.dao.SetorDAO;
import br.gov.ce.srh.patrimonio.dao.UltimaMovimentacaoDAO;
import br.gov.ce.srh.patrimonio.entidade.Movimentacao;
import br.gov.ce.srh.patrimonio.entidade.OrgaoExterno;
import br.gov.ce.srh.patrimonio.entidade.UltimaMovimentacao;
import br.gov.ce.srh.patrimonio.entidade.Patrimonio;
import br.gov.ce.srh.patrimonio.entidade.Setor;

public class MovimentacaoMBean {

	private Patrimonio patrimonio = new Patrimonio();
	private Movimentacao movimentacao = new Movimentacao();
	private UltimaMovimentacao ultimaMovimentacao = new UltimaMovimentacao();
	private Setor setor = new Setor();
	private Setor SetorAtual = new Setor();
	private OrgaoExterno orgaoExterno = new OrgaoExterno();
	private boolean externo;
	private SetorDAO setorDao = new SetorDAO();
	private PatrimonioDAO patrimonioDao = new PatrimonioDAO();
	private MovimentacaoDAO movimentacaoDao = new MovimentacaoDAO();
	private UltimaMovimentacaoDAO ultimaMoviDAO = new UltimaMovimentacaoDAO();
	private OrgaoExternoDAO orgaoDao = new OrgaoExternoDAO();
	private List<Movimentacao> listaMovimentacoesPorPatrimonio = new ArrayList<Movimentacao>();
	private List<SelectItem> listaDeTdsSetores = new ArrayList<SelectItem>();
	private List<SelectItem> listaDeOrgsExternos = new ArrayList<SelectItem>();
	

	
	public MovimentacaoMBean() {
		
	}
	
	
	 public void showExterno() {  
		         System.out.println("is externo: " + externo);  
		     } 
	
	/* public void setaTrue(ActionEvent evt){ 
		 this.setExterno(true);  
		}*/
	
	public List<Movimentacao> listarTdasMovimentacoes(){
		
		List<Movimentacao> lista = this.movimentacaoDao.buscarMovimentacaoPorCodPatrimonio(this.patrimonio.getCdPatrimonio());
		
		return lista;
		
	}
	
	
	public List<SelectItem> listarSetores(){
		
		List<SelectItem> listaSetores = new ArrayList<SelectItem>();
		
		List<Setor> listaTemporaria = setorDao.listarTodosSetores();
		
		for(Setor setor : listaTemporaria){
			
			listaSetores.add(new SelectItem(setor.getCdSetor(),setor.getSiglaSetor()));
		}
		
		return listaSetores;
		
	}


	public List<SelectItem> listarOrgaosExternos(){
		
List<SelectItem> listaOrgaos = new ArrayList<SelectItem>();
		
		List<OrgaoExterno> listaTemporaria = orgaoDao.buscarTodos();
		
		for(OrgaoExterno orgao : listaTemporaria){
			
			listaOrgaos.add(new SelectItem(orgao.getCdOrgao(),orgao.getDsSigla()));
		}
		
		
		return listaDeOrgsExternos;
		
		
		
	}
	

	public String movimentarPatrimonio(){

	
	this.setor = setorDao.findById(this.setor.getCdSetor());
	
	//System.out.println("PATRIMONIO: "+this.patrimonio.getNotaFiscalBens());
	
	this.movimentacao.setSetor(this.setor);
	this.movimentacao.setPatrimonio(this.patrimonio);
	
	
/*	if (!ultimaMoviDAO.listarUltMovimentacao(this.patrimonio).isEmpty()){
	
	this.ultimaMovimentacao = ultimaMoviDAO.listarUltMovimentacao(this.patrimonio).get(0);
	
	this.movimentacao = movimentacaoDao.buscarMovimentacaoPorCodPatrimonio(this.patrimonio.getCdPatrimonio());
	
	movimentacaoDao.update(movimentacao);
	
	}*/
	
	this.patrimonio.setMovimentado(true);
	
	patrimonioDao.updateEntity(this.patrimonio);
	
	movimentacaoDao.addEntity(this.movimentacao);
	
	return "MovimentarPatrimonio";
	
	
	
}

	


	/**
	 * @param patrimonio the patrimonio to set
	 */
	public void setPatrimonio(Patrimonio patrimonio) {
		this.patrimonio = patrimonio;
	}


	/**
	 * @return the patrimonio
	 */
	public Patrimonio getPatrimonio() {
		return patrimonio;
	}


	/**
	 * @param movimentacao the movimentacao to set
	 */
	public void setMovimentacao(Movimentacao movimentacao) {
		this.movimentacao = movimentacao;
	}


	/**
	 * @return the movimentacao
	 */
	public Movimentacao getMovimentacao() {
		return movimentacao;
	}


	/**
	 * @param listaDeTdsSetores the listaDeTdsSetores to set
	 */
	public void setListaDeTdsSetores(List<SelectItem> listaDeTdsSetores) {
		this.listaDeTdsSetores = listaDeTdsSetores;
	}


	/**
	 * @return the listaDeTdsSetores
	 */
	public List<SelectItem> getListaDeTdsSetores() {
		
		setListaDeTdsSetores(this.listarSetores());
		
		return listaDeTdsSetores;
	}

	/**
	 * @param setor the setor to set
	 */
	public void setSetor(Setor setor) {
		this.setor = setor;
	}

	/**
	 * @return the setor
	 */
	public Setor getSetor() {
		
		return setor;
	}

	/**
	 * @param setorAtual the setorAtual to set
	 */
	public void setSetorAtual(Setor setorAtual) {
		SetorAtual = setorAtual;
	}

	/**
	 * @return the setorAtual
	 */
	public Setor getSetorAtual() {
		
List<Movimentacao> movTemporaria = new ArrayList<Movimentacao>();
		
		movTemporaria = movimentacaoDao.buscarMovimentacaoPorCodPatrimonio(this.patrimonio.getCdPatrimonio());
		
		for (Movimentacao movimentacao : movTemporaria) {
			
			//System.out.println("SETOR DA MOVIMENTAÇÃO: "+movimentacao.getSetor().getSiglaSetor());
			
			this.SetorAtual = movimentacao.getSetor();
			
		}
		
		
		
		return SetorAtual;
	}

	
	/**
	 * @param listaMovimentacoesPorPatrimonio the listaMovimentacoesPorPatrimonio to set
	 */
	public void setListaMovimentacoesPorPatrimonio(
			List<Movimentacao> listaMovimentacoesPorPatrimonio) {
		this.listaMovimentacoesPorPatrimonio = listaMovimentacoesPorPatrimonio;
	}

	/**
	 * @return the listaMovimentacoesPorPatrimonio
	 */
	public List<Movimentacao> getListaMovimentacoesPorPatrimonio() {
		setListaMovimentacoesPorPatrimonio(listarTdasMovimentacoes());
		
		return listaMovimentacoesPorPatrimonio;
	}



	public void setListaDeOrgsExternos(List<SelectItem> listaDeOrgsExternos) {
		this.listaDeOrgsExternos = listaDeOrgsExternos;
	}

	public List<SelectItem> getListaDeOrgsExternos() {
		
		setListaDeOrgsExternos(listarOrgaosExternos());
		
		return listaDeOrgsExternos;
	}

	public void setOrgaoExterno(OrgaoExterno orgaoExterno) {
		this.orgaoExterno = orgaoExterno;
	}

	public OrgaoExterno getOrgaoExterno() {
		return orgaoExterno;
	}

	public void setExterno(boolean externo) {
		this.externo = externo;
	}

	public boolean isExterno() {
		return externo;
	}



	
}

o web.xml já foi postado em cima.

faces.config

<managed-bean>
  <managed-bean-name>movimentacaoMBean</managed-bean-name>
  <managed-bean-class>patrimonio.faces.MovimentacaoMBean</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>

… da uma olhadinha, como é idêntico ao teu.

T

Cara, tem um

javax.faces.DEFAULT_SUFFIX .xhtml

e um

Faces Servlet *.jsf

que não tão batendo, como você está acessando a tua página?! pagina.jsf ou pagina.xhtml !!!

Eu uso facelets com jsf e o richfaces em um outro projeto e funciona, esse que eu passei era apenas utilizando jsf.

Faça um teste, troque o

.jsf
para
.xhtml

e teste de novo

E

minhas paginas são *.xhtml, por isso eu utilizo

&lt;context-param&gt;
  &lt;param-name&gt;javax.faces.DEFAULT_SUFFIX&lt;/param-name&gt;
  &lt;param-value&gt;.xhtml&lt;/param-value&gt;
 &lt;/context-param&gt;

e por isso tenho:

&lt;servlet-mapping&gt;
  &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
  &lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;
 &lt;/servlet-mapping&gt;
R

thiago.correa:
Cara, tem um

javax.faces.DEFAULT_SUFFIX .xhtml

e um

Faces Servlet *.jsf

que não tão batendo, como você está acessando a tua página?! pagina.jsf ou pagina.xhtml !!!

Eu uso facelets com jsf e o richfaces em um outro projeto e funciona, esse que eu passei era apenas utilizando jsf.

Faça um teste, troque o

.jsf
para
.xhtml

e teste de novo

Mas a forma certa é *.jsf mesmo,que é como está o mapeamento do Faces Servlet.

Dessa forma,uma chamada a pagina.jsf redirecionará para pagina.xhtml

T

Velho outra coisa que eu reparei, tu tem 2 filters configurados, apenas um basta

<filter> <display-name>RichFaces Filter</display-name> <filter-name>richfaces</filter-name> <filter-class>org.ajax4jsf.Filter</filter-class> </filter> <filter-mapping> <filter-name>richfaces</filter-name> <servlet-name>Faces Servlet</servlet-name> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping>

T

raf4ever:
thiago.correa:
Cara, tem um

javax.faces.DEFAULT_SUFFIX .xhtml

e um

Faces Servlet *.jsf

que não tão batendo, como você está acessando a tua página?! pagina.jsf ou pagina.xhtml !!!

Eu uso facelets com jsf e o richfaces em um outro projeto e funciona, esse que eu passei era apenas utilizando jsf.

Faça um teste, troque o

.jsf
para
.xhtml

e teste de novo

Mas a forma certa é *.jsf mesmo,que é como está o mapeamento do Faces Servlet.

Dessa forma,uma chamada a pagina.jsf redirecionará para pagina.xhtml

É verdade, eu me confundi com um aconselhamento de que, quando se usar páginas xhtml, utilizar o mapeamento do JSF como xhtml também!

R

thiago.correa:
Velho outra coisa que eu reparei, tu tem 2 filters configurados, apenas um basta

<filter> <display-name>RichFaces Filter</display-name> <filter-name>richfaces</filter-name> <filter-class>org.ajax4jsf.Filter</filter-class> </filter> <filter-mapping> <filter-name>richfaces</filter-name> <servlet-name>Faces Servlet</servlet-name> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping>

Na verdade isso ai não são 2 filtros,mas sim um filtro e a declaração do mapeamento… :wink:

No caso,o filtro do RichFaces intercepta todas as requisições .jsf

E

eu acabei de ajeitar isso, e infelimente, nada funciona. =(

R

nenhuma msg de erro,warning,nada???

E

nenhum error, nenhum rerended, nada.

e detalhe, qndo eu coloco para debbug, ele não entra no método “showExterno” , ou melhor, ele parece q nem chama o MB.

R

e se vc tentar o exemplo que o nosso amigo postou?

sei q está bem parecido,mas tente criando uma nova página e um novo MB.Apenas pra desencargo de consciência.

T

Meu conselho, faça um projeto só com essa parte, comce com jsf, depois com o rich faces e por último com o facelets, daí você vai descobrir aonde está o furo da bala! Ou, tente aumentar os níveis de log para ver se nenhum dos 3 frameworks não estão tentando alertar de algum problema!

Pois como disse, só com o jsf + richfaces, funfou legal! Tenho em casa um outro projeto com jsf,richaces,facelets,spring e hibernate e funciona 100%. É bem provável que seja alguma coisa de configuração no web.xml! Ele não dá nenhum erro de JS???! Dá uma olhada no console do Firefox!

E

pelo visto, vou ter que voltar pro velho javascript…

vai ser o único jeito pelo visto, até alguem tentar uma outra solução.

Y
Tire o tomahawk apenas pra teste. Pode estar dando conflito(improvavel, mas não custa tentar);

E se possivel poste uma img de como esta a organização das suas pastas. Coloque o escopo do MB para session, e declare o externo começando como TRUE;

O Check box deve ser renderizado selecionado e o painelGroup também deve ser renderizado.

E se possivel coloque um print no construtor do MB, pode ser algo do tipo new Eu hahahaha <img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pngtuck_out_tongue.png?v=6" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:">
Y

Tente assim

<managed-bean>
  <managed-bean-name>movimentacaoMBean</managed-bean-name>
  <managed-bean-class>br.gov.ce.srh.patrimonio.faces.MovimentacaoMBean</managed-bean-class> 
  <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>
T

Ygor:
EuclidesFilizola:

faces.config

<managed-bean>
  <managed-bean-name>movimentacaoMBean</managed-bean-name>
 <managed-bean-class>patrimonio.faces.MovimentacaoMBean</managed-bean-class> 
  <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>

Tente assim

<managed-bean> <managed-bean-name>movimentacaoMBean</managed-bean-name> <managed-bean-class>br.gov.ce.srh.patrimonio.faces.MovimentacaoMBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>

Acho que você matou a charada!
:lol:

E

thiago.correa:
Ygor:
EuclidesFilizola:

faces.config

<managed-bean>
  <managed-bean-name>movimentacaoMBean</managed-bean-name>
 <managed-bean-class>patrimonio.faces.MovimentacaoMBean</managed-bean-class> 
  <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>

Tente assim

<managed-bean> <managed-bean-name>movimentacaoMBean</managed-bean-name> <managed-bean-class>br.gov.ce.srh.patrimonio.faces.MovimentacaoMBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>

Acho que você matou a charada!
:lol:

boa tarde amigo,

eu não coloquei na imagem “br.gov.ce.srh” para não expor a entidade mencionada. Entendeu cara ?

R

O problema continua então?

E

Problema resolvido.

Mudei 2 coisas "basicas".

Primeiro passe de <h:form> para <a4j:form> ,

no meu MB

eu troquei private boolean externo, para private Boolean externo = false;

agora ficou o código abaixo funcionando:

&lt;a4j:form id="form_ajax"&gt;

       
         &lt;a4j:outputPanel ajaxRendered="true"&gt;   
             &lt;h:messages showDetail="true"/&gt;   
         &lt;/a4j:outputPanel&gt;
       
         &lt;h:panelGroup id="painel_orgao_pai" &gt; 
             &lt;h:outputLabel value="Externo"/&gt; 
             &lt;h:selectBooleanCheckbox  id="id_externo" value="#{movimentacaoMBean.externo}" &gt; 
             &lt;a4j:support reRender="form_ajax" event="onclick" 
               action="#{movimentacaoMBean.setaTrue}"/&gt; 
             &lt;/h:selectBooleanCheckbox&gt; 
             <br /> 
      
                &lt;h:panelGroup id="painel_orgao_externo"  rendered="#{movimentacaoMBean.externo}"&gt; 
                   &lt;h:outputLabel value="Orgao externo" id="lb_orgaoexterno"/&gt; 
                     &lt;h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" &gt; 
                       &lt;f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" /&gt; 
                   &lt;/h:selectOneMenu&gt; 
             &lt;/h:panelGroup&gt; 
     &lt;/h:panelGroup&gt;
       
        &lt;/a4j:form&gt;

Agradeço a compreensão de todos, preciso verificar depois, só porque no h:form não funcionou.

Abraços,

R

Massa!

Acho estranho de qualquer forma,mas o importante é que resolveu :lol:

J

Solucionado

Criado 16 de setembro de 2010
Ultima resposta 19 de fev. de 2011
Respostas 87
Participantes 7