Desenvolvi uma aplicação para a internet e estou com o seguinte problema: Após a inclusão de um registro, os dados são limpos do emu Form, porem, ao clicar no botão ATUALIZAR do Internet Explorer, estou conseguindo incluir um novo registro com os mesmo dados do registro anterior. Como eu faço para desativar o botão ATUALIZAR do Internet Explorer utilizando HTML?.
Nesta aplicação, estou utilizando Struts com JSP.
Agradeço a boa vontade de todos.
Botão atualizar do Internet Explorer - IE
4 Respostas
Não há como fazer isso pelo HTML ou JavaScript. Vc precisa é rever a sua página e procurar outra forma de limpar o Form. Uma solução é, após a inserção, vc redirecionar o usuário novamente para a página de inclusão ao invés de simplesmente apagar os campos.
Só não entendi como que isso, pois, normalmente, o IE só reenvia os dados se vc faz um post na página. Sendo assim, ainda não consigo entender de que forma vc apaga os campos e pq faz isso, uma vez que o IE, ao atualizar a página, obviamente apaga os campos. Ainda na mesma idéia, pensei que vc estivesse Ajax, mas aí seria mais estranho pq dados postados via Ajax não seriam reenviados no caso de uma atualização de página.
O problema nem é o botão Refresh, o problema é com o fluxo do seu programa. Terias que desabilitar o atualizar, a tecla F5, Ctrl+R etc…
Quando você atualiza, você reenvia os últimos parâmetros para a mesma página, então se você está juntando as ações seqüencialmente, ele irá reenviar os últimos dados como normalmente.
O que poderias fazer é mandar para uma action e depois para uma outra action sem enviar parâmetros, “evitando em parte” esse “problema”.
Até!
Obs.: As aspas são para significar que isso não está totalmente certo conceitualmente.
cara, já sofri esse problema e resolvi utilizando um id para a transaçao.
ex:
ao acessar a action do form coloco um random como parâmetro da sessão, tipo:
session.setAttribute("transId", random);
Na jsp eu tinha um input hiddem pegando esse valor., tipo.
<input type="hidden" name="transId" value='<c:out value="${sessionScope.transId}"/>' />
e no action que recebe o submit eu verifico o transId q tá como atributo na sessão, se bater eu removo o atributo e sigo o fluxo, se o usuário der um refresh, meu action não vai mais achar o atributo na sessão, ai joga uma exception pra cima.]
Depois eu automatizei um pouco isso com uma custom tag, mas no mais foi isso aí… mei braçal mas na época não tinha achado outra solução.
[]´s
Eu sempre usei filtros e controle de sessões para fazer isso, por exemplo. Quando finalizo o cadastro, eu chamo na minha action, um método que seta um valor a minha variável que controla a sessao. Esse filtro é registro no meu web.xml e falo quais URL's vão usar ele, daí toda vez que chamar a URL, ele verifica se o meu controle de sessao é veraddeira, se sim, ele continua com a solicitação, se Não, ele é redirecionado para a tela principal de cadastro. Olha aí um exemplo meu:
Nesse caso, eu controlo a sessao com o CPF, se nulo, ele inicia um novo cadastro.public class Sessao implements Filter
{
public void init ( FilterConfig config ) throws ServletException
{
System.out.println ( "init - Inicio" );
}
public void doFilter ( ServletRequest request ,
ServletResponse response ,
FilterChain chain ) throws IOException , ServletException
{
HttpServletRequest req = ( HttpServletRequest ) request;
HttpServletResponse res = ( HttpServletResponse ) response;
HttpSession session = req.getSession ( );
CandidatoController candidatoController = ( CandidatoController ) session.getAttribute ( "candidatoController" );
if ( candidatoController == null ) candidatoController = new CandidatoController ( );
System.out.println ( candidatoController.getCandidato ( )
.getCpf ( ) );
if ( candidatoController.getCandidato ( )
.getCpf ( ) != null )
{
chain.doFilter ( request , response );
}
else
res.sendRedirect ( "index.unipam" );
}
public void destroy ( )
{}
}
<filter>
<filter-name>Sessao</filter-name>
<filter-class>br.edu.unipam.vestibular.filter.Sessao</filter-class>
</filter>
<filter-mapping>
<filter-name>Sessao</filter-name>
<url-pattern>/public/ficha.unipam</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Sessao</filter-name>
<url-pattern>/public/confirma.unipam</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Sessao</filter-name>
<url-pattern>/public/ok.unipam</url-pattern>
</filter-mapping>
Simples assim...
Até!!!