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

Alguem poderia me dar alguma solução ?

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

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

: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;
	}
	
	

	
}

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;

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

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;

deixa eu ver o código do movimentacaoMBean

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

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)

[quote=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="" /> [/quote]

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

[quote=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)[/quote]

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 !!!

posta ai o código do MB

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


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;
	}





[quote=thiago.correa]Tenta o event=“onchange” ao invés de event=“onclick”
[/quote]

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

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

qual o escopo desse bean no faces-config?

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

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

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

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.

resolvido então??

[quote=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.[/quote]

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!