Alguem poderia me dar alguma solução ?
mudar para javascript ? utilizar algum outro componente ? algo relacionado ?
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]
Mas tá estranho isso…
Exemplo de código que eu fiz q funciona:
<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">
<h:form>
<h:panelGroup id="painel_orgao_pai">
<h:outputLabel value="Externo"/>
<h:selectBooleanCheckbox id="id_externo" value="#{bean.certo}" >
<a4j:support reRender="painel_orgao_pai" event="onclick"
ajaxSingle="true" />
</h:selectBooleanCheckbox>
<br/>
<h:panelGroup id="painel_orgao_externo" >
<h:outputLabel value="Orgao externo" id="lb_orgaoexterno" rendered="#{bean.certo}"/>
</h:panelGroup>
</h:panelGroup>
</h:form>
</ui:composition>
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…
<h:form id="movimentacao_patrimonio" prependId="false">
<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" >
<h:outputLabel value="Orgao externo" id="lb_orgaoexterno" rendered="#{movimentacaoMBean.externo}"/>
<h:selectOneMenu value="#{movimentacaoMBean.orgaoExterno.cdOrgao}" id="codOrgao" rendered="#{movimentacaoMBean.externo}" >
<f:selectItem itemLabel="" />
<f:selectItems value="#{movimentacaoMBean.listaDeOrgsExternos}" />
</h:selectOneMenu>
</h:panelGroup>
</h:panelGroup>
</h:form>
…
por acaso,esse teu layout.xhtml tem algum h:form dentro dele?
Não tem não Rafael.
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link href="/SistemaPatrimonio/css/estilo.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="/SistemaPatrimonio/js/funcao_tab.js"></script>
<script type="text/javascript" src="/SistemaPatrimonio/js/javascript.js"></script>
</head>
<body class="twoColElsLtHdr">
<div id="container">
<div id="header">
<h1><img /></h1>
</div>
<div id="sidebar1" >
<h3><ui:include src="/pages/menu.xhtml"/></h3>
</div>
<div id="mainContent">
<ui:insert name="conteudo"></ui:insert>
</div>
<rich:spacer height="39" />
<div id="footer">
<br /><br />
<hr /><br/>
</div>
</div>
</body>
</html>
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<Movimentacao> listaMovimentacoesPorPatrimonio = new ArrayList<Movimentacao>();
private List<SelectItem> listaDeTdsSetores = new ArrayList<SelectItem>();
private List<SelectItem> listaDeOrgsExternos = new ArrayList<SelectItem>();
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?
<a4j:outputPanel ajaxRendered="true">
<h:messages showDetail="true"/>
</a4j:outputPanel>
abraços.
resolvido então??
[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!