Estou na tela de login, e ao validar no servlet eu abro uma página com iframe, mas quando retorna, o iframe fica pequeno, ai teho que dar um refresh (F5) na página e ai volta ao normal…
Tem alguma maneira de eu fazer a página carregar no retorno do SERVLET? ou mudar algo no webxml ? pois na url fica o nome do servlet…
Quer resolver o problema de forma fácil? Use Ajax, no seu ajax vc pode retornar sua jsp(chegando tudo pronto) ou dados xml ou json(onde vai vir só o objeto) e vc coloca onde quiser os dados.
Iframe eu acho uma merda q inventaram e dá mais dor de cabeça q nao sei oq…
Ou tem q ser iframe por padrão da empresa?
Tem que ser algo que não fique carregando a página…
Mas tentei Ajax até a última… mas com essas dos Browsers estava ficando loco, não consegui adaptar para IE e CHROME…
Estava pensando em usar as funções do Ajax de submit, mas ainda apanho muito dele…
Pensei em criar uma página de erros e direcionamentos, assim que o servlet tratar, enviar para essa jsp e dela enviar de volta para a jsp com iframe, mas acho isso meio estranho pois o servlet já serve para isso…
Não sei se existe alguma configuração no web.xml para quando o Servlet responder ele realemnte direcionar e não deixar o nome da servlet na url…
Seguinte, use jquery e seus problemas de browser vao acabar, é simples e funciona no ie, chrome, firefox.
Com 5 linhas de javascript vc faz isso. Tenta aew, se nao conseguir vai postando oq esta empacando q a gente vai ajudando.
O que preciso no momento é que funcionasse corretamente a devolução do Servlet, mas quando ele devolve tem um javascript que redimensiona o iframe que não funciona, então tenho que apertar o F5.
Outro caso é na tela de login, quando forço o erro, a mensagem de login e/ou senha inválido só aparece se eu apertar o F5.
Tela de login:
<% if (request.getSession().getAttribute("loginUsuario") != null) {%>
<script type="text/javascript">
if (window.top != window.self) {
window.top.location="3.jsp"; // AQUI VERIFICO SE TEM USUARIO NA SESSION SE SIM, ENCAMINHA PARA A TELA PRINCIPAL, MAS ESTÁ COM O PROBLEMA
}
</script>
<%} else {%>
<style>
#content {position:relative;}
</style>
<body>
<div id="content">
<center>
<form action="ServletValidaLogin" method="post">
<input type="hidden" id="msgRetornoLogin" value="<c:out value="${msgRetornoLogin}"/>" />
<br>
<br>
<br>
<br>
<br>
<br>
<table border="1px" cellspacing="0" cellpadding="6">
<tr class="tabelaAcesso">
<td style="border-color: white" style="border-style:groove" colspan="3">Acessar</td>
</tr>
<tr class="textoAcesso">
<td align="left" style="border-color: white" style="border-style:groove">Login:</td>
<td><input type="text" name="login" id="login" align="left" maxlength=15 style="background-color: #DCDCDC"></td>
</tr>
<tr class="textoAcesso">
<td align="left" style="border-color: white" style="border-style:groove">Senha:</td>
<td><input type="password" name="senha" id="senha" align="left" maxlength=15 style="background-color: #DCDCDC"></td>
</tr>
</table>
<br>
<input type="submit" value="Acessar">
</form>
</center>
</div>
</body>
<script>
var msgRetornoLogin = document.getElementById("msgRetornoLogin");
if (msgRetornoLogin != null && msgRetornoLogin.value != "") {
alert(msgRetornoLogin.value);
}
</script>
<%} %>
SERVLET DO LOGIN:
public ServletValidaLogin() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
VerificaUsuario verifica = new VerificaUsuario();
String login = "a";//request.getParameter("login");
String senha = request.getParameter("senha");
String msgRetornoLogin = null;
try {
boolean status = verifica.verificarUsuario(login, senha);
boolean a = true;
if (a == true) { // teste
request.getSession().setAttribute("loginUsuario", login);
//request.getRequestDispatcher("3.jsp").forward(request, response); JÁ TENTEI ASSIM TAMBÉM
response.sendRedirect("3.jsp");
} else {
msgRetornoLogin = "Login e/ou Senha inválido(s)";
request.setAttribute("msgRetornoLogin", msgRetornoLogin);
request.getRequestDispatcher("access.jsp").forward(request, response); // ASSIM, ELE DEIXA O NOME DA SERVLET NA URL E PRECISO APERTAR F5 PARA MOSTRAR ERRO
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
AO ENTRAR NA TELA COM IFRAME, TENHO UM SUBMIT, QUE ESTÁ COM O MESMO PROBLEMA
Tela que tem o iframe
<div>
<iframe src="teste.jsp" name="destino" frameborder="0" id="destino" scrolling="yes"/></iframe>
</div>
<div><input name="pesquisaRel" id="pesquisaRel" type="submit" value="Pesquisar"/></div>
Uso esse script para ajustar o iframe :
if ( window.addEventListener ) {
document.getElementById('destino').addEventListener('load',ResizeI,false);
window.addEventListener('resize',ResizeAllF,false);
} else {
document.getElementById('destino').attachEvent('onload',ResizeI);
window.attachEvent('onresize',ResizeAllF);
}
SERVLET DO IFRAME:
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
List<ListaFiltro> relatorioAtual = new ArrayList<ListaFiltro>();
// Consultar campos do Filtro
ValidaData validaData = new ValidaData();
String dataIni = request.getParameter("dataIni");
String dataFin = request.getParameter("dataFin");
String horaIni = request.getParameter("horaIni");
String horaFin = request.getParameter("horaFin");
String[] MultiplosDadosFiltro = request.getParameterValues("MultiplosDadosFiltro");
if (MultiplosDadosFiltro == null){
System.out.println("VAZIO");
msgRetornoFiltro = "Selecione um Campo";
request.setAttribute("msgRetornoFiltro", msgRetornoFiltro);
request.getRequestDispatcher("error.jsp").forward(
request, response); // AQUI ESTOU TENTANDO CRIAR UMA TELA PARA ADMINISTRAR ERRO E SUCESSO.
} else {
try {
System.out.println(" dataIni: " + dataIni + " dataFin: " + dataFin + " horaIni: " + horaIni + " horaFin: " + horaFin);
VerificarFiltroResultado vrGera = new VerificarFiltroResultado();
relatorioAtual = vrGera.Verificador(MultiplosDadosFiltro);
// Preenche a lista para gerar o arquivo caso apertem o botão
String[] teste = MultiplosDadosFiltro;
String retorno = "";
if(teste!= null){
for (String s : teste) {
retorno += s+",";
}
}
request.setAttribute("MultiplosDadosAtuais2", retorno);
request.setAttribute("relatorioAtual", relatorioAtual);
request.getRequestDispatcher("teste.jsp").forward(
request, response);
} catch (BiffException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Estou na tela de login, e ao validar no servlet eu abro uma página com iframe, mas quando retorna, o iframe fica pequeno, ai teho que dar um refresh (F5) na página e ai volta ao normal…
Tem alguma maneira de eu fazer a página carregar no retorno do SERVLET? ou mudar algo no webxml ? pois na url fica o nome do servlet…
Não… o erro que dá é que fica o nome da Servlet na url, como se não tivesse encaminhado para a tela 3.jsp, ai eu tenho que apertar o F5 para recarregar ai funciona, ou mostra a mensagem de login inválido (quando está) ou ajusta o frame (se o login tiver correto)
Não é mensagem de erro e sim o problema… não sei se consegui ser claro? pq as vezes penso e não escrevo rsrs
mais não é mais fácil fazer um filtro de login, se o cara não estiver na sessao envia para tela de login senao trabalha normalmente…
criar um filtro de login com umas 5 linhas fica mais fácil, mais legivel e elegante doq esse monte de código não, ou tem algo q eu não vi?
Acredito que vc protegeu a sua pagina dentro do web-inf, de modo a forçar o usuário a logar para ter acesso, aí ao invés de dar um redirect vc pode fazer um foward.
Mas o meu problema não está apenas em mudar o nome, mas sim de realmente ele abrir a página 3.jsp, mesmo eu usando o forward no servlet, ele não carrega a página, ele simplesmente direciona para ela.
O caso é que a página 3.jsp abre, mas fica com o iframe torto, ai precisa de um F5 para arrumar, mas como não está realmente na 3.jsp (e sim com o nome da servlet na url) ele fica em branco ao tentar dar um refresh.
Mas o meu problema não está apenas em mudar o nome, mas sim de realmente ele abrir a página 3.jsp, mesmo eu usando o forward no servlet, ele não carrega a página, ele simplesmente direciona para ela.
O caso é que a página 3.jsp abre, mas fica com o iframe torto, ai precisa de um F5 para arrumar, mas como não está realmente na 3.jsp (e sim com o nome da servlet na url) ele fica em branco ao tentar dar um refresh.[/quote]
OK vamos por partes! O primeiro o problema é carregar a pagina com dados, correto?
Esse dados vem de onde? Request? Session? DB?
Se vier na Request, VC precisa na sua servlet recupera-los e setar novamente na Request.
O meu problema não está como o iframe pega ou encaminha a página.
O meu problema está em dois ciclos.
1º: Ao validar o login:
Quando dou submit no servlet, ele não retorna a mensagem de erro, pois fica branco:
(Anexo 1)
2: ciclo, acessar a página.
E quando mudo o servlet (simulando o acesso com sucesso) abre o iframe com tamanho pequeno, e agora nem apertando F5 não vai, pois fica apontando para o ServletValidaLogin, e não para a tela 3.jsp.
Quando eu coloquei uma tela de JSP para usar como direcionamento: ( página access.jsp–> página Valida --> Servlet --> página Valida --> 3.jp OU access.jsp) aparecia a página 3.jsp com esse problema do tamanho do iframe, ai era só eu apertar F5 que funcionava (MAS ainda ficava na url a valida.jsp e não a 3.jsp)
A solução alternativa (gambiarra) que eu achei foi a de tratar em uma jsp e não em um Servlet, devido ao redirecionamento que não recarregava a página:
Não consegui usar o servlet para redirecionar corretamente para atender minha necessidade, então uso uma jsp como servlet e faço o tratamento de redirecionar com location.href:
[code]
<%
VerificaUsuario verifica = new VerificaUsuario();
String login = request.getParameter("login");
String senha = request.getParameter("senha");
boolean status = verifica.verificarUsuario(login, senha);
if (verifica.verificarUsuario(login, senha) == true) {
out.println("Login feito com sucesso " + verifica.login);
request.getSession().setAttribute("loginUsuario", login);
%>
<script>
location.href = "index.jsp"
</script>
<%
} else {
%>
<script>
alert("Login e/ou Senha inv\u00e1lido(s)");
location.href = "login.jsp";
</script>
<%
}
%>
Eu queria muito ter adicionado filtros… mas sou novo ainda em desenvolvimento web (acho que percebeu né ) mas não tenho tempo hábil de fazer… a minha área é mais para desenvolver protótipos não será o sistema final, mas eu tento fazer o mais próximo possível.
Como não consegui aprender rápido a colocar os filtros eu tive que apelar para isso…
Outro problema do filtro é que eu acho que iria deparar de novo com a parte de redirecionar… pois o tratamento dele é semelhante a de um servlet não é?