[RESOLVIDO] Ajuda com selectOneMenu

8 respostas
dlsilva1812

Bom dia galera

Vou estou tentando fazer uma ação quando muda o valor do meu <h:selectOndeMenu> ativar ou desativar uma div na minha tela.
Qdo eu mudo o valor só chama a tela novamente, mas não ativa a outra Div.

Estou fazendo deste jeito, mas não tá funcionando, será que alguém pode dar uma ajuda.
no meu JSP está assim, fiz a lista diretamente nele, pois não tem tabela referenciando no banco e tentei de td fazer no Java mas não consegui.

<%@page import="br.com.monisat.empresa.CadEmpresa"%>
<%@ page contentType="text/html;charset=iso-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>
<%@ taglib uri="http://myfaces.apache.org/sandbox" prefix="s"%>
<%@ page import="br.com.monisat.empresa.CadEmpresa"%>

<html>

<head>

<%@include file="../home/importar.jsp"%>

<script type="text/javascript">
	function habilitaDiv() {
		document.getElementById("jur").style.display = 'inline'
		document.getElementById("fis").style.display = 'none'

	}
	function habilitaDiv2() {
		document.getElementById("jur").style.display = 'none'
		document.getElementById("fis").style.display = 'inline'
	}
</script>
<style type="text/css">
.cont {
	display: none;
}
.fis{
	display: none;
}

</style>
</head>

<body>
	<f:view>
		<h:form id="form">

			<div id="toolbar-home">
				<div class="migalha">
					<a href="../home/home.jsf">Inicio</a> &gt; <a
						href="../cadastros/menu.jsf">Cadastros</a> &gt; <b>Empresas</b>
				</div>

				<%@include file="../home/sair.jsp"%>

				<div class="clear"></div>
			</div>
			<f:verbatim>
				<br>
			</f:verbatim>
			<t:div>
				<h:panelGrid columns="1" width="800px">
					<t:column>
						<h:panelGrid columns="1">
							<h:column>
								<h:outputText value="Nome" />
							</h:column>
							<h:inputText size="80" id="nomeEmpresa" />
							<h:column>
								<h:panelGrid columns="2">
									<t:column>
										<h:panelGrid columns="1">
											<h:column>
												<h:outputText value="Fantasia" />
											</h:column>
											<h:inputText size="60" id="nomeFantasia" />
										</h:panelGrid>
									</t:column>
									<t:column>
										<h:panelGrid columns="1">
											<h:column>
												<h:outputText value="Cadastrado em" />
											</h:column>
											<h:inputText size="15" id="dataCadastro" />
										</h:panelGrid>
									</t:column>
								</h:panelGrid>
							</h:column>
							<h:column>
								<h:panelGrid columns="2">
									<t:column>
										<h:panelGrid columns="1">
											<h:column>
												<h:outputText value="Natureza" />
											</h:column>
											<h:selectOneMenu id="natureza" immediate="true" value="#{cadEmpresa.natureza}"
												rendered="true" valueChangeListener="#{cadEmpresa.interpretaNatureza}"
												onchange="submit()">
												<f:selectItem itemValue="J" itemLabel="J-Juridica" />
												<f:selectItem itemValue="F" itemLabel="F-Física" />
												<a4j:support event="onchange" immediate="true" ajaxSingle="true"/>
											</h:selectOneMenu>
										</h:panelGrid>
									</t:column>
									<t:column>
										<t:div id="jur" styleClass="jur">
											<t:column>
												<h:panelGrid columns="3">
													<t:column>
														<h:panelGrid columns="1">
															<h:column>
																<h:outputText value="CNPJ" />
															</h:column>
															<h:inputText size="15" id="cnpj" />
														</h:panelGrid>
													</t:column>
													<t:column>
														<h:panelGrid columns="1">
															<h:column>
																<h:outputText value="Insc. Estadual" />
															</h:column>
															<h:inputText size="15" id="inscEst" />
														</h:panelGrid>
													</t:column>
													<t:column>
														<h:panelGrid columns="1">
															<h:column>
																<h:outputText value="Insc. Municipal" />
															</h:column>
															<h:inputText size="15" id="inscMuni" />
														</h:panelGrid>
													</t:column>
												</h:panelGrid>
											</t:column>
										</t:div>
										<t:div id="fis" styleClass="fis">
											<t:column>
												<h:panelGrid columns="4">
													<t:column>
														<h:panelGrid columns="1">
															<h:column>
																<h:outputText value="Sexo" />
															</h:column>
															<h:selectOneMenu id="sexo" />
														</h:panelGrid>
													</t:column>
													<t:column>
														<h:panelGrid columns="1">
															<h:column>
																<h:outputText value="CPF" />
															</h:column>
															<h:inputText size="15" id="cpf" />
														</h:panelGrid>
													</t:column>
													<t:column>
														<h:panelGrid columns="1">
															<h:column>
																<h:outputText value="RG" />
															</h:column>
															<h:inputText size="15" id="rg" />
														</h:panelGrid>
													</t:column>
													<t:column>
														<h:panelGrid columns="1">
															<h:column>
																<h:outputText value="Estado Civil" />
															</h:column>
															<h:selectOneMenu id="estadoCivil" />
														</h:panelGrid>
													</t:column>
												</h:panelGrid>
											</t:column>
										</t:div>
									</t:column>
								</h:panelGrid>
							</h:column>
							<h:column>
								<h:panelGrid columns="4">
									<h:panelGrid columns="1">
										<h:outputLabel value="Telefone" />
										<h:inputText id="telefone" size="15" />
									</h:panelGrid>
									<h:panelGrid columns="1">
										<h:outputLabel value="Celular" />
										<h:inputText id="celular" size="15" />
									</h:panelGrid>
									<h:panelGrid columns="1">
										<h:outputLabel value="Fax" />
										<h:inputText id="fax" size="15" />
									</h:panelGrid>
									<h:panelGrid columns="1">
										<h:outputLabel value="Contato" />
										<h:inputText id="contato" size="25" />
									</h:panelGrid>
								</h:panelGrid>
							</h:column>
							</h:panelGrid>
					</t:column>
				</h:panelGrid>
			</t:div>
		</h:form>
	</f:view>
	<script type="text/javascript">
		function validar() {

			var list = new Lista("form");
			list.add("nome", "Nome");
			list.add("cpf", "Cpf");
			list.add("apelido", "Apelido");
			list.add("dataNasc", "Data Nascimento");
			list.add("cidade", "Cidade");
			list.add("rg", "RG");
			list.add("cnh", "CNH");

			return valida(list);
		}

		function validar2() {
			var list = new Lista("form");
			list.add("cpf", "Cpf");

			return valida(list);
		}
	<%CadEmpresa empresa = new CadEmpresa();%>
		<script type="text/javascript">
	<%if (!empresa.verificaNatureza() == true) {%>
		habilitaDiv2();
	<%} else {%>
		habilitaDiv();
	<%}%>
		
	</script>
</body>
</html>

Bean

package br.com.monisat.empresa;

import javax.faces.event.ValueChangeEvent;

public class CadEmpresa extends CadEmpresaForm {

	private String natureza = "";
	Boolean status = null;

	public CadEmpresa() {
	}

	public String getNatureza() {
		return natureza;
	}

	public void setNatureza(String natureza) {
		this.natureza = natureza;
	}

	public Boolean getStatus() {
		return status;
	}

	public void setStatus(Boolean status) {
		this.status = status;
	}
	
	public void interpretaNatureza(ValueChangeEvent event){
		natureza = (String) event.getNewValue();
		carregaTela();
	}

	private String carregaTela() {
		return "cadEmpresa";
		
	}

	public Boolean verificaNatureza() {
		status = null;
		
		if (natureza.contains("J")) {
			status = true;
		} else {
			status = false;
		}
		return status;
	}
}

Estou com o projeto parado aqui… :roll:

Cordialmente
Diego Silva

8 Respostas

thiago.correa

o a4j:support possui um atributo chamado reRender. passe para ele o(s) id(s) do(s) componente(s) que deseja atualiar!

ex.:

<a4j:support event=“onchange” immediate=“true” ajaxSingle=“true” reRender=“jur, fis”/>

dlsilva1812

Valeu amigo… Mas não funcionou!! :frowning:
Ficou dando fazendo a mesma coisa!

thiago.correa

É que tem um porém, o que deveria aparecer?!
Pois pegando um trecho do teu código

<h:inputText size=“15” id=“inscEst” />

isso não vai ser atualizado nunca, pois não está “ligado” a nenhuma propriedade de um Managed Bean.

dlsilva1812

Acho q não expliquei bem!
Eu preciso ativar/ desativar as divs. Pois elas ocupam a mesma posição… Se for a div “jur” vai aparecer CNPJ, INSCRIÇÃO ESTADUAL, MUNICIPAL… Se for a “fis” vai aparecer CPF, SEXO, ESTADO CIVIL, eu preciso q faça isso, só mostrar 1 ou a outra.

thiago.correa

Ah agora sim, as coisas começam a tomar sentido! Voicê tem que se lembrar que o JSF por si só não vai saber o que deve e o que não deve ser renderizado, para isso é necessário fazer um controle.

Testa o seguinte código, eu não consegui testá-lo aqui, lembre-se se usar o atributo reRender na tag support

<t:div id="jur" styleClass="jur" >   
	<t:column rendered="#{cadEmpresa.natureza eq 'J'}" >   
		<h:panelGrid columns="3">   
			<t:column>   
				<h:panelGrid columns="1">   
					<h:column>   
						<h:outputText value="CNPJ" />   
					</h:column>   
					<h:inputText size="15" id="cnpj" />   
				</h:panelGrid>   
			</t:column>   
			<t:column>   
				<h:panelGrid columns="1">   
					<h:column>   
						<h:outputText value="Insc. Estadual" />   
					</h:column>   
					<h:inputText size="15" id="inscEst" />   
				</h:panelGrid>   
			</t:column>   
			<t:column>   
				<h:panelGrid columns="1">   
					<h:column>   
						<h:outputText value="Insc. Municipal" />   
					</h:column>   
					<h:inputText size="15" id="inscMuni" />   
				</h:panelGrid>   
			</t:column>   
		</h:panelGrid>   
	</t:column>   
</t:div>   
<t:div id="fis" styleClass="fis" >   
	<t:column rendered="#{cadEmpresa.natureza eq 'F'}" >   
		<h:panelGrid columns="4">   
			<t:column>   
				<h:panelGrid columns="1">   
					<h:column>   
						<h:outputText value="Sexo" />   
					</h:column>   
					<h:selectOneMenu id="sexo" />   
				</h:panelGrid>   
			</t:column>   
			<t:column>   
				<h:panelGrid columns="1">   
					<h:column>   
						<h:outputText value="CPF" />   
					</h:column>   
					<h:inputText size="15" id="cpf" />   
				</h:panelGrid>   
			</t:column>   
			<t:column>   
				<h:panelGrid columns="1">   
					<h:column>   
						<h:outputText value="RG" />   
					</h:column>   
					<h:inputText size="15" id="rg" />   
				</h:panelGrid>   
			</t:column>   
			<t:column>   
				<h:panelGrid columns="1">   
					<h:column>   
						<h:outputText value="Estado Civil" />   
					</h:column>   
					<h:selectOneMenu id="estadoCivil" />   
				</h:panelGrid>   
			</t:column>   
		</h:panelGrid>   
	</t:column>   
</t:div>
dlsilva1812

Deu certo em termos, pois ativo a jur e aparece, ativo a fis e aparece, mas qdo vou marcar para aparecer a jur novamente dá exception.

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Submitted value of type String for component : {Component-Path : [Class: org.ajax4jsf.framework.ajax.AjaxViewRoot,ViewId: /cadastro/cadEmpresa.jsp][Class: javax.faces.component.html.HtmlForm,Id: form][Class: org.apache.myfaces.custom.div.Div,Id: _idJsp4][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp5][Class: org.apache.myfaces.custom.column.HtmlSimpleColumn,Id: _idJsp6][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp7][Class: javax.faces.component.UIColumn,Id: _idJsp20][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp21][Class: org.apache.myfaces.custom.column.HtmlSimpleColumn,Id: _idJsp29][Class: org.apache.myfaces.custom.div.Div,Id: fis][Class: org.apache.myfaces.custom.column.HtmlSimpleColumn,Id: _idJsp44][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp45][Class: org.apache.myfaces.custom.column.HtmlSimpleColumn,Id: _idJsp46][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp47][Class: javax.faces.component.html.HtmlSelectOneMenu,Id: sexo]}expected
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:154)
	org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:127)
	org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:277)
	org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)

root cause

java.lang.IllegalArgumentException: Submitted value of type String for component : {Component-Path : [Class: org.ajax4jsf.framework.ajax.AjaxViewRoot,ViewId: /cadastro/cadEmpresa.jsp][Class: javax.faces.component.html.HtmlForm,Id: form][Class: org.apache.myfaces.custom.div.Div,Id: _idJsp4][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp5][Class: org.apache.myfaces.custom.column.HtmlSimpleColumn,Id: _idJsp6][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp7][Class: javax.faces.component.UIColumn,Id: _idJsp20][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp21][Class: org.apache.myfaces.custom.column.HtmlSimpleColumn,Id: _idJsp29][Class: org.apache.myfaces.custom.div.Div,Id: fis][Class: org.apache.myfaces.custom.column.HtmlSimpleColumn,Id: _idJsp44][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp45][Class: org.apache.myfaces.custom.column.HtmlSimpleColumn,Id: _idJsp46][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp47][Class: javax.faces.component.html.HtmlSelectOneMenu,Id: sexo]}expected
	org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedUIOutputValue(RendererUtils.java:591)
	org.apache.myfaces.shared_impl.renderkit.html.HtmlMenuRendererBase.getConvertedValue(HtmlMenuRendererBase.java:126)
	javax.faces.component.UIInput.getConvertedValue(UIInput.java:396)
	javax.faces.component.UIInput.validate(UIInput.java:350)
	javax.faces.component.UIInput.processValidators(UIInput.java:184)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
	javax.faces.component.UIForm.processValidators(UIForm.java:73)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
	javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:149)
	org.ajax4jsf.framework.ajax.AjaxViewRoot.access$201(AjaxViewRoot.java:53)
	org.ajax4jsf.framework.ajax.AjaxViewRoot$3.invokeRoot(AjaxViewRoot.java:315)
	org.ajax4jsf.framework.ajax.JsfOneOneInvoker.invokeOnRegionOrRoot(JsfOneOneInvoker.java:53)
	org.ajax4jsf.framework.ajax.AjaxContext.invokeOnRegionOrRoot(AjaxContext.java:191)
	org.ajax4jsf.framework.ajax.AjaxViewRoot.processValidators(AjaxViewRoot.java:329)
	org.apache.myfaces.lifecycle.ProcessValidationsExecutor.execute(ProcessValidationsExecutor.java:32)
	org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
	org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
	org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:127)
	org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:277)
	org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.22 logs.
Apache Tomcat/7.0.22
thiago.correa

javax.faces.component.html.HtmlSelectOneMenu,Id: sexo]}expected

Dá uma olhada na tua combo ‘sexo’

dlsilva1812

Era isso mesmo meu brother não tinha feito os itens para os combos…
Muito obrigado…
Já vou mudar o título do tópico para resolvido!

Abraço!

Criado 13 de junho de 2012
Ultima resposta 13 de jun. de 2012
Respostas 8
Participantes 2