Pessoal,
Estou com dificuldades de entendimento para pegar um valor selecionado em uma combo e ele me abrir uma tela (modal) com os valores selecionados a partir de uma tabela no banco de dados. vamos para os codigos, primeiro mostrar a tela para entendimento:
Supondo que selecionei “rodrigo teste”:
o codigo na JSP esta assim:
<div class="panel panel-primary panel-table">
<div class="panel-body">
<div class="pull-left">
<div class="col-xs-12 col-mg-5 col-lg-12">
<div class="form-group">
<select class="selectpicker form-control" id="Editar_Parametro" >
<option value="0">Selecione um Set de Simulação...</option>
<c:forEach var="dadosGeraisResult" items="${resultPage.result}">
<option value="${dadosGeraisResult.codigo}" >${dadosGeraisResult.nomeDoSet}</option>
</c:forEach>
</select>
</div>
</div>
</div>
agora a Function que chama o modal e passa os valores:
<script type="text/javascript">
function visualizarParametro(id) {
$('#modalOperacaoBody').html('Carregando...');
$.post("DadosGerais!visualizarEntidade", 'entidade.codigo=' + id,
function(data) {
$("#modalOperacaoBody").html(data);
});
}</script>
Bem quando eu seleciono o valor não acontece nada… ja vi alguns resolvidos aqui…tentei aplicar e não deu certo…
acredito que o problema seja na combo. Mas aparentemente esta correto…
Só para detalhar melhor esse é o codigo da jsp modal:
<%@ taglib prefix=“s” uri="/struts-tags" %>
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
<%@ taglib prefix=“tce” uri=“http://tce.pe.gov.br/jsp/tcetags”%>
<s:hidden id="idEntidade" name="entidade.codigo" value="%{entidade.codigo}"/>
<div class="row">
<div class="col-lg-12">
<div class="form-group">
<label class="col-sm-3 control-label">Nome do Set:</label>
<div class="col-sm-9">
<s:textarea cols="80" rows="3" id="nomeDoSet"
name="entidade.nomeDoSet" value="%{entidade.nomeDoSet}" />
</div>
</div>
<div class="form-group" >
<label class="col-sm-3 control-label">Ultimo Ano Folha:</label>
<div class="col-sm-3">
<s:textarea cols="80" rows="3" id="utimaExecucaoFolha"
name="entidade.utimaExecucaoFolha" value="%{entidade.utimaExecucaoFolha}" />
</div>
</div>
<div class="form-group" >
<label class="col-sm-3 control-label">Ano Zero:</label>
<div class="col-sm-3">
<s:textarea cols="80" rows="3" id="anoZero"
name="entidade.anoZero" value="%{entidade.anoZero}" />
</div>
</div>
<div class="form-group" >
<label class="col-sm-3 control-label">Data Criação:</label>
<div class="col-sm-3">
<s:textarea cols="80" rows="3" id="dataCriacao"
name="entidade.dataCriacao" value="%{entidade.dataCriacao}" />
</div>
</div>
<div class="form-group" >
<label class="col-sm-3 control-label">Notas Explicativas:</label>
<div class="col-sm-3">
<s:textarea cols="80" rows="3" id="notasExplicativas"
name="entidade.notasExplicativas" value="%{entidade.notasExplicativas}" />
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="panel-footer text-center">
<div class="btn-group btn-group-sm">
<c:if test="${entidade != null && entidade.codigo != null && entidade.codigo > 0}">
<s:submit cssClass="btn btn-primary" action="DadosGerais" method="alterar" value="Alterar" onclick="return checarFormulario()"/>
</c:if>
<c:if test="${entidade == null || entidade.codigo == null || entidade.codigo == 0}">
<s:submit cssClass="btn btn-primary" action="DadosGerais" method="cadastrar" value="Cadastrar" onclick="return checarFormulario()"/>
</c:if>
</div>
</div>
</div>
</div>
Em nenhum ponto do código eu vi você chamando a função, se precisa de um valor vindo do combo, pode usar o evento onchange…
<select ... onchange="visualizarParametro(this.value);">
...
Isso vai passar o próprio valor do option selecionado para a função…
<form class="form-horizontal" role="form" action="DadosGerais">
<div class="panel panel-primary">
<div class="panel-heading">
<div class="panel-title"></div>
</div>
<div class="panel panel-primary panel-table">
<div class="panel-body">
<div class="pull-left">
<div class="col-xs-12 col-mg-5 col-lg-12">
<div class="form-group">
<select class="selectpicker form-control" onchange="visualizarParametro(this.value);" >
<option value="0">Selecione um Set de Simulação...</option>
<c:forEach var="dadosGeraisResult" items="${resultPage.result}" varStatus="num">
<option value="${dadosGeraisResult.codigo}" data-toggle="modal" data-target="#modalOperacao">${dadosGeraisResult.nomeDoSet}</option>
</c:forEach>
</select>
</div>
</div>
</div>
Coloquei o onchange realmente ele respondeu… pois o log mostrou a consulta pelo hibernate, porem o modal ainda não rederiza.
function visualizarParametro(id) {
$('#modalOperacaoLabel').html('Editar Parâmetro');
$('#modalOperacaoBody').html('Carregando...');
$.post("DadosGerais!visualizarEntidade", 'entidade.codigo=' + id,
function(data) {
$("#modalOperacaoBody").html(data);
});
}
function adicionarParametro() {
$('#modalOperacaoLabel').html('Incluir Parâmetro');
$('#modalOperacaoBody').html('Carregando...');
$.post("DadosGerais!visualizarEntidade", 'entidade.nomeDoSet='
+ $('#nomeDoSetPesquisa').val() + '&entidade.utimaExecucaoFolha='
+ $('#utimaExecucaoFolhaPesquisa').val(), function(data) {
$("#modalOperacaoBody").html(data);
});
}
olhando as duas funções que tenho elas estão iguais e uma funciona quando vou criar um novo formulario.
Agora o log esta aparecendo assim:
[WARN ][2018-01-22 17:37:01][http-bio-8080-exec-10] (CommonsLogger.java->warn:49) - couldn't clear tomcat cache
java.lang.NoSuchFieldException: resourceEntries
at java.lang.Class.getDeclaredField(Unknown Source)
at com.opensymphony.xwork2.util.LocalizedTextUtil.clearMap(LocalizedTextUtil.java:857)
at com.opensymphony.xwork2.util.LocalizedTextUtil.clearTomcatCache(LocalizedTextUtil.java:837)
at com.opensymphony.xwork2.util.LocalizedTextUtil.reloadBundles(LocalizedTextUtil.java:821)
at com.opensymphony.xwork2.util.LocalizedTextUtil.findDefaultText(LocalizedTextUtil.java:186)
at com.opensymphony.xwork2.util.LocalizedTextUtil.getDefaultMessage(LocalizedTextUtil.java:679)
at com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:539)
at com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:363)
at org.apache.struts2.interceptor.FileUploadInterceptor.getTextMessage(FileUploadInterceptor.java:434)
at org.apache.struts2.interceptor.FileUploadInterceptor.getTextMessage(FileUploadInterceptor.java:421)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:232)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at br.gov.pe.tce.autorizacao.action.AutorizacaoInterceptor.intercept(AutorizacaoInterceptor.java:38)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Hibernate:
/* load br.gov.pe.tce.piloto.entity.DadosGeraisEntity */ select
dadosgerai0_.Codigo as Codigo1_0_,
dadosgerai0_.AnoZero as AnoZero1_0_,
dadosgerai0_.DataCriacao as DataCria3_1_0_,
dadosgerai0_.NomeDoSet as NomeDoSet1_0_,
dadosgerai0_.NotasExplicativas as NotasExp5_1_0_,
dadosgerai0_.UltimaExecucaoFolha as UltimaEx6_1_0_
from
SIMULADOR_DadosGerais dadosgerai0_
where
dadosgerai0_.Codigo=?
Para o modal renderizar se não me engano (faz tempo que não converso com Bootstrap Bill Turner
)…
$("#modalOperacaoBody").html(data).modal('show');
Eu ja tinha tentado isso e não deu certo, vi nos exemplos de modal o que é estranho que para adicionar por ser um botão onclick funciona perfeitamente. mas selecionando o valor não esta mostrando o modal.
Ah, lembrei que no modal, o corpo (class=“modal-body”) deve ter seu html modificado, e não o modal inteiro como você fez (ao menos é o que imagino já que não tem o código do modal)…
$("#modalOperacaoBody").html(data);
Você pode tentar…
$(".modal-body").html(data);
$("#modalOperacaoBody").modal("show");
Melhor ainda para não sobrecarregar o DOM…
var modal = $("#modalOperacaoBody");
var corpo = modal.find(".modal-body");
corpo.html(data);
modal.modal("show");
Sempre use o F12 do navegador para ver erros no console…
Veja este exemplo: http://cssdeck.com/labs/nvse73lq
Basicamente:
HTML:
<select onchange="teste(this)">
<option></option>
<option value="1">Opcao 1</option>
<option value="2">Opcao 2</option>
</select>
…
JS:
function teste(select) {
$("#myModal").modal();
$("#myModal .modal-body").html("Valor selecionado no select: " + $(select).val());
}
1 curtida
Agora eu que não prestei atenção nos nomes dos ids…
Imagino que seu #modalOperacaoBody já pega o corpo do modal certo (modal-body)?
Nesse caso, o modal nunca será renderizado porque precisa pegar o id da div “pai” dele…
<div id="modalCompleto">
...
<div id="modalOperacaoBody" class="modal-body">...</div>
</div>
Se sua estrutura estiver +/- assim, você precisa…
var modal = $("#modalCompleto");
var corpo = modal.find("#modalOperacaoBody");
corpo.html(data);
modal.modal("show");
É uma dica válida, mas sobrecarrega o DOM indo duas vezes na árvore, melhor guardar em variáveis e buscar na árvore “mais interna” como mostrei acima…
Sim, o exemplo foi só ilustrativo pro objetivo da questão do tópico.
1 curtida
Pessoal cheguei nesta solução mas tem um problema:
Primeiro o codigo:
Criei um novo modal para alteração:
<div class="modal fade" id="modalAlteracao" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true">×</span><span class="sr-only">Fechar</span>
</button>
<h4 id="modalOperacaoLabel" class="modal-title">Título</h4>
</div>
<div id="modalAlteracaoBody" class="modal-body">Carregando...</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Fechar</button>
</div>
</div>
</div>
</div>
Agora o javascript:
function teste(select) {
$("#modalAlteracao").modal();
$("#modalAlteracao .modal-body").html("Valor selecionado no select: " + $(select).val());
$.post("DadosGerais!visualizarEntidade", 'entidade.codigo=' + $(select).val(),
function(data) {
$("#modalAlteracaoBody").html(data);
});
}
o problema é que quando clico na combo ele apresenta a tela tentando carregar o formulario e não consigo selecionar outro valor.
<div class="panel panel-primary panel-table">
<div class="panel-body">
<div class="pull-left">
<div class="col-xs-12 col-mg-5 col-lg-12">
<div class="form-group">
<select onchange="teste(this);" data-toggle="modal" data-target="#modalAlteracao">
<option value="0">Selecione um Set de Simulação...</option>
<c:forEach var="dadosGeraisResult" items="${resultPage.result}" >
<option value="${dadosGeraisResult.codigo}" >${dadosGeraisResult.nomeDoSet}</option>
</c:forEach>
</select>
</div>
</div>
</div>
Olhando para o select o unico lugar para colocar o data-target é na tag select não é?
só que o comportamento esta errado…e estou precisando selecionar o valor e clicar novamente
Retira isso do seu select:
data-toggle="modal" data-target="#modalAlteracao"
É isso que faz o bootstrap clicar, entao apaga esse trecho e deixa só o onchange="teste(this)"
como mostrei no exemplo.
Bom dia,
Mas não é esse trecho que chama o modal?
Isso permite ao bootstrap chamar a modal no click, como tinha explicado. Você quer chamar a modal no click ou no onchange afinal?
Isso chama o modal em qualquer evento que quiser: $("#modalAlteracao").modal();