Gostaria de ao selecionar o produto, carregasse outra combobox com os preços, utilizando javascript para fazer a requisição na servlet.
Vc precisará fazer uma requisição AJAX. Está usando algum framework javascript? Já tem a servlet criada?
Já utilizei o javascript básico, respondendo a outra pergunta, tenho a servlet, estou com dificuldade para via javascript captutar o id da select option e fazer a requisicao para servlet.
JSP
<div class="form-group col-md-4">
<label for="exampleInputEmail1">Produto</label>
<select class="form-control select2" style="width: 100%;"
id="id_produto" name="id_produto" onchange="consultarPreco()">
<option value="">Selecione</option>
<c:forEach items="${produto}" var="product">
<option value="${product.id}" id="${product.id}"
<c:if test="${product.id == orcament.id_produto}">
<c:out value = "selected=selected" />
</c:if>>
${product.descricao}
</option>
</c:forEach>
</select>
</div>
<div class="form-group col-md-4">
<label for="exampleInputEmail1">Preco</label>
<select class="form-control select2" style="width: 100%;" id="id_preco" name="id_preco">
<option value="">Selecione</option>
<c:forEach items="${valores}" var="preco">
<option value="${preco.id}" id="${preco.id}"
<c:if test="${preco.id == orcament.id_preco}">
<c:out value = "selected=selected" />
</c:if>>
${preco.tipo_preco} - ${preco.preco}
</option>
</c:forEach>
</select>
</div>
Servlet
package servlet;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javafx.scene.input.DataFormat;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import beans.Orcamento;
import beans.Produto;
import dao.DaoOrcamento;
import dao.DaoProduto;
@WebServlet("/salvarOrcamento")
public class ServletOrcamento extends HttpServlet {
private static final long serialVersionUID = 1L;
private DaoOrcamento daoOrcamento = new DaoOrcamento();
public ServletOrcamento() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String acao = request.getParameter("acao");
String id_produto = request.getParameter("id_produto");
try {
RequestDispatcher view = request.getRequestDispatcher("/pages/orcamento.jsp");
if (acao != null && acao.equalsIgnoreCase("listartodos")) {
request.setAttribute("orcamentos", daoOrcamento.listar());
} else if (acao != null && acao.equalsIgnoreCase("listartodosprod")) {
RequestDispatcher view2 = request.getRequestDispatcher("/pages/cad_orcamento.jsp");
request.setAttribute("produtos", daoOrcamento.listaProduto());
//request.setAttribute("precos", daoOrcamento.consultaPreco(id_produto));
view2.forward(request, response);
} else if(acao!= null && acao.equalsIgnoreCase("consultarPreco")) {
//RequestDispatcher view3 = request
//.getRequestDispatcher("/pages/precos.jsp");
request.setAttribute("valores", daoOrcamento.listaPreco(id_produto));
//view3.forward(request, response);
}
if (!acao.equalsIgnoreCase("visualizar")) {
request.setAttribute("cliente", daoOrcamento.listaCliente());
request.setAttribute("produto", daoOrcamento.listaProduto());
//request.setAttribute("valores",daoOrcamento.listaPreco());
// DaoOrcamento.listaProduto());
view.forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String acao = request.getParameter("acao");
String id_produto = request.getParameter("valorParam");
boolean podeInserir = true;
try {
String id = request.getParameter("id");
String id_cliente = request.getParameter("id_cliente");
//String id_produto = request.getParameter("id_produto");
String data_inicial = request.getParameter("data_inicial");
String data_final = request.getParameter("data_final");
String dias = request.getParameter("dias");
Orcamento orcamento = new Orcamento();
orcamento.setId(!id.isEmpty() ? Long.parseLong(id) : null);
orcamento.setId_cliente(Long.parseLong(id_cliente));
orcamento.setId_produto(Long.parseLong(id_produto));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date datainicial = sdf.parse(data_inicial);
Date datafinal = sdf.parse(data_final);
orcamento.setData_inicial(datainicial);
orcamento.setData_final(datafinal);
orcamento.setDias(dias);
if (id == null || id.isEmpty() && podeInserir) {
daoOrcamento.salvar(orcamento);
} else if(acao!= null && acao.equalsIgnoreCase("consultarPreco")) {
//RequestDispatcher view3 = request
//.getRequestDispatcher("/pages/precos.jsp");
request.setAttribute("valores", daoOrcamento.listaPreco(id_produto));
//view3.forward(request, response);
}
RequestDispatcher view = request.getRequestDispatcher("/pages/orcamento.jsp");
request.setAttribute("orcamentos", daoOrcamento.listar());
// request.setAttribute("msg", "Salvo com Sucesso");
view.forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Falai @rudgieri bom dia,
Teria como postar o código que fez em javascript?
Para pegar o id em javascript você poderia utilizar isso:
var combo = document.getElementById("id_produto");
var itemSelecionado = combo.options[combo.selectedIndex].value;
Abraços
Max
Com esse javascript consegui, quando seleciono o produto ele trás os preços corretamente, porém perde o produto selecionado no option, ou seja sempre q seleciono um produto e busco os precos ele retorna para o option padrão.
<script type="text/javascript">
function consultarPreco() {
var produto = document.getElementById("id_produto").value;
location.href = "http://localhost:8080/projeto-jsp/salvarOrcamento?acao=consultarPreco&id_produto="
+ (produto);
}
</script>
Falai @rudgieri o que esta acontecendo é que na sua function consultarPreco voce esta usando um location.href que simplesmente redireciona a pagina para outro endereço e acaba “resetando” os campos preenchidos.
Qual o objetivo desse location.href ???
Abraços
Max
Com ele executo a ação “acao=consultarPreco” passando o id_produto para servlet.
Depois consulto no banco de dados todos os preços referentes a este id_produto e retorno para view.
Fala @rudgieri uma alternativa para voce não dar refresh na pagina seria essa consulta que realiza através do location.href fosse feita assincronamente através do JQuery, pois dessa forma só a combo de preços seria atualizada.
Abraços
Max