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 
[quote=thiago.correa][quote=raf4ever]thiago,
qual o propósito desse trecho?
<a4j:outputPanel ajaxRendered="true">
<h:messages showDetail="true"/>
</a4j:outputPanel>
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![/quote]
legal…interessante…
o esco do mb é request.
coloquei o
<a4j:outputPanel ajaxRendered="true">
<h:messages showDetail="true"/>
</a4j:outputPanel>
e não apareceu erro nenhum quando eu clico no selectBox.
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 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”
<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>
MB
public void showExterno() {
System.out.println("is externo: " + externo);
}
… saberiam me explicar ?
aqui está meu web.xml para vocês darem uma olhada.
<display-name>SistemaPatrimonio</display-name>
<context-param>
<param-name>org.richfaces.SKIN</param-name>
<param-value>emeraldTown</param-value>
</context-param>
<context-param>
<param-name>org.richfaces.CONTROL_SKINNING</param-name>
<param-value>enable</param-value>
</context-param>
<context-param>
<param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
<param-value>com.sun.facelets.FaceletViewHandler</param-value>
</context-param>
<context-param>
<param-name>org.ajax4jsf.SKIN</param-name>
<param-value>classic</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<context-param>
<param-name>facelets.REFRESH_PERIOD</param-name>
<param-value>2</param-value>
</context-param>
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.validateXml</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.verifyObjects</param-name>
<param-value>true</param-value>
</context-param>
<!-- CONFIGURAÇÃO TOMAHAWK -->
<filter>
<filter-name>MyFacesExtensionsFilter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
<init-param>
<param-name>uploadMaxFileSize</param-name>
<param-value>20m</param-value>
</init-param>
</filter>
<!-- CONFIGURAÇÃO RICHFACES -->
<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter>
<display-name>Ajax4jsf Filter</display-name>
<filter-name>ajax4jsf</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter>
<display-name>LoginFilter</display-name>
<filter-name>LoginFilter</filter-name>
<filter-class>patrimonio.filtros.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>richfaces</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>ajax4jsf</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/LoginFilter</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Registro Geral</servlet-name>
<servlet-class>patrimonio.relatorio.RegistroGeralBens</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Registro Geral</servlet-name>
<url-pattern>/report</url-pattern>
</servlet-mapping>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
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
[quote=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[/quote]
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.
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
minhas paginas são *.xhtml, por isso eu utilizo
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
e por isso tenho:
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
[quote=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[/quote]
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
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>
[quote=raf4ever][quote=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[/quote]
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[/quote]
É verdade, eu me confundi com um aconselhamento de que, quando se usar páginas xhtml, utilizar o mapeamento do JSF como xhtml também!
[quote=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>
[/quote]
Na verdade isso ai não são 2 filtros,mas sim um filtro e a declaração do mapeamento… 
No caso,o filtro do RichFaces intercepta todas as requisições .jsf
eu acabei de ajeitar isso, e infelimente, nada funciona. =(
nenhuma msg de erro,warning,nada???
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.
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.
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!
pelo visto, vou ter que voltar pro velho javascript…
vai ser o único jeito pelo visto, até alguem tentar uma outra solução.