Pessoal, como crio uma caixa de confirmação do tipo OK_Cancel em J2EE? Tenho um link que referencia um jsp que contem “pagina.jsp?action=excluir” e quero que o usuário confirme antes que a servlet realmente exclua o dado. como faço?
Equivalente a JOptionPane em Servlets e JSP
10 Respostas
Não é bem criar caixa de confirmação em JEE, acho que você quis dizer na página, ou melhor, no navegador.
Para isso você pode utilizar a função javascript confirm(texto) que retorna true ou false.
Mas como que se faz em javascript?
Desde já agradeço.
<script type="text/javascript">
function confirma(codigo){
var resposta=confirm('Tem certeza que deseja fazer isso?');
if (resposta) {
//arqui redireciono com o código entre parametro
} else {
//aqui faço nada.
}
}
</script>
Bom, se você estiver fazendo “na mão”, então saiba que tem que ter um form cuja action aponte para o servlet. Então, neste ponto você submeteria o form. Exemplo tosco:
<script>
buddy.submit();
</script>
<form name='buddy' action='/meuservlet'>
.
.
.
conteúdo
.
.
.
</form>
<script type="text/javascript">
function confirma(cod){
var resposta=confirm('Deseja realmente excluir?');
if (resposta)
excluir.submit();
}
</script>
e abaixo…
Mas não funciona. Algo errado?
caro ununes!
não funciona é muito genérico…
dá erro de javascript ou erro do servidor? o que acontece quando você clica no botão?
não aparece erro nem mensagem de erro nenhuma, nem de javascript.
Dê mais detalhes do que está acontecendo, a página está em branco ou algo do tipo?
Bem, consegui enviar, na verdade estava sim dando um erro de javascript. Mas agoras não está excluindo direito… vejam os fontes:
clientes.jsp
<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@page import="java.util.List"%>
<%@page import="sys.cliente.Cliente"%>
<%@page import="java.util.Iterator"%>
<%@page import="sys.resources.Messages"%>
<%@page import="java.text.DateFormat"%>
<%@page import="java.text.SimpleDateFormat"%><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" href="../imagens/template_css.css" type="text/css"/>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title><%=Messages.getString("tabClientes")%></title>
<%
String erro = (String) request.getAttribute("erro");
if ((erro != null) && (erro.length() != 0)){
%>
<p style="color: red"><%= erro %></p>
<p><a href="Listar?action=1"><%=Messages.getString("textoWebVoltar")%></a></p>
<%
}
else{
%>
<script type="text/javascript">
function confirma(){
if (confirm('Tem certeza que deseja fazer isso?'))
formulario.submit();
}
</script>
</head>
<body>
<center><h1><%=Messages.getString("tabClientes")%></h1></center>
<form action="Listar?action=4" method="post" name="formulario">
<table width="84%" border="1" align="center">
<tr>
<td></td>
<td width="7%"><div align="center"><strong>Codigo</strong></div></td>
<td><div align="center"><strong>Nome</strong></div></td>
<td><div align="center"><strong>Data de Nascimento</strong></div></td>
<td><div align="center"><strong>Endereco</strong></div></td>
</tr>
<%
List lista = (List) request.getAttribute("lista");
Iterator iterator = lista.iterator();
Cliente cliente = null;
SimpleDateFormat df = new SimpleDateFormat(Messages.getString("formatoData"));
while (iterator.hasNext()){
cliente = (Cliente)iterator.next();
%>
<tr>
<td><input type="checkbox" name="check[]" value="<%= cliente.getCod()%>"/>
<td><%= cliente.getCod()%></td>
<td><%= cliente.getNomeCompleto()%></td>
<td><%if (cliente.getDatnas() == null) {%>Não Informado<%}else%><%= df.format(cliente.getDatnas())%></td>
<td><%if (cliente.getEnd() == null) {%>Não Informado<%}else%><%= cliente.getEnd()%></td>
</tr>
<%
}
%>
<tr>
<td></td>
<td><input type="button" name="ver" value="Ver Dados"></td>
<td><input type="button" name="alterar" value="Alterar"></td>
<td><input type="button" name="excluir" value="Excluir" onclick="confirma()"></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</form>
<p></p>
<p><a href="principal.jsp"><%=Messages.getString("textoWebVoltar")%></a></p>
</body>
</html>
<%
}
%>
ListarServlet.java
package com.sismed.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import sys.negocio.ICadastro;
import sys.negocio.IPesquisa;
import sys.cliente.Cliente;
import sys.resources.Messages;
public class ListarServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private ClassPathXmlApplicationContext context = null;
public ListarServlet() {
super();
context = new ClassPathXmlApplicationContext("service.xml");
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
if (request.getParameter("action").equals("1")) {
doListar(request, response);
} else if (request.getParameter("action").equals("4")) {
mostrarErro(request, response, "entrou no doGet");
} else {// action não encontrada
mostrarErro(request, response, Messages
.getString("msgServletListarActionErrada"));
}
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
if (request.getParameter("action").equals("1")) {
doListar(request, response);
} else if (request.getParameter("action").equals("4")) {
if (request.getParameterValues("check[]") == null)
mostrarErro(request,response,"Nenhum cliente selecionado");
else {
int contaErro=0, contaSucesso=0;
String[] selecionados = request.getParameterValues("check[]"); //aqui é onde devo excluir
IPesquisa pesquisa = (IPesquisa) context.getBean("pesquisa");
ICadastro remocao = (ICadastro) context.getBean("cadastro");
for (int i=0; i<selecionados.length; i++){
Cliente cliente = pesquisa.pesquisarClientePorID(selecionados[i]);
if (cliente != null){
Cliente aux = cliente;
if (remocao.apagarCliente(cliente))
{
contaErro++;
}
else{
contaSucesso++;
}
}
}
String erro = "";
if (contaSucesso > 0)
erro +=contaSucesso + " clientes removidos com sucesso.";
if (contaErro > 0)
erro += " " + contaErro + " clientes não podem ser removidos pois estão relacionados a outros dados.";
List<Cliente> lista = (List<Cliente>)pesquisa.pesquisarTodosOsCliente();
request.setAttribute("lista", lista);
request.setAttribute("erro", erro);
RequestDispatcher dispatcher = request
.getRequestDispatcher("clientes.jsp");
dispatcher.forward(request, response);
}
} else {// action não encontrada
mostrarErro(request, response, Messages
.getString("msgServletListarPacientesActionErrada"));
}
}
private void doListar(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
List<Cliente> lista = null;
IPesquisa pesquisa = (IPesquisa) context.getBean("pesquisa");
lista = (List<Cliente>) pesquisa.pesquisarTodosOsClientes();
if (lista == null)
mostrarErro(request, response, "Clientes não encontrados");
else {
try {
request.setAttribute("lista", lista);
RequestDispatcher dispatcher = request
.getRequestDispatcher("clientes.jsp");
dispatcher.forward(request, response);
} catch (Exception e) {
mostrarErro(request, response, Messages
.getString("msgServletListarPacientesErroListar"));
}
}
}
private void mostrarErro(HttpServletRequest request,
HttpServletResponse response, String string)
throws ServletException, IOException {
request.setAttribute("erro", string);
RequestDispatcher dispatcher = request
.getRequestDispatcher("clientes.jsp");
dispatcher.forward(request, response);
}
}
O que ocorre é que: se tenho uma lista de, por exemplo, 10 elementos e seleciono somente 1, a função da servlet que apaga a lista está tentando apagar todos os registros independentemente de estarem selecionados ou não. Eu gostaria que apagasse como nos webmails, apenas os que estão selecionados e se puderem ser apagados.
Resolvido, na verdade o erro era na classe de busca por ID. Funcionando. Obrigado a todos pela ajuda.