Guarde os valores em algum lugar, como campos hidden ou mesmo na session do usuario, e, quando voltar para a pagina original, regupere os valores.
Rafael
Guarde os valores em algum lugar, como campos hidden ou mesmo na session do usuario, e, quando voltar para a pagina original, regupere os valores.
Rafael
Voce nao pode assumir que pode brincar com o request a vontade. O escopo dele eh de uma requisicao. Se voce tentar utiliza-lo depois dessa requisicao nao sabe o que vai acontecer (vai depender do servlet conteiner).
Uma tatica melhor que a dos campos hidden eh simplesmente pegar os parametros e colocar num HashMap. Coloque esse hashmap na session.
Quando o usuario clica no botao para voltar voce da um new HttpServletRequest() {
//implementa os metodos aqui
}
E faz com que os metodos implementados utilizem o seu hashmap.
Dessa maneira voce consegue uma ferramenta generica que ira funcionar em todas as suas paginas sem ter que ficar alterando seu codigo html.
Att
Guilherme Silveira
Pessoal,
A situação é a seguinte: O usuário se encontra numa tela de busca onde é aplicado um critério e, em seguida, um dos registros retornados é selecionado para edição. O usuário então acessa a tela de cadastro do item selecionado, edita os dados e confirma a edição. Neste momento, a aplicacação deve retornar para a tela de busca inicial, "restaurando" o seu último estado, isto é, com o critério de busca preenchido e com os registros obtidos na última busca na tabela/grid.
Imaginei resolver esta situação de uma forma genérica fazendo o seguinte: Nas telas desejadas, o request atual seria empilhado de modo que seria perfeitamente possível desempilhar o último request e passá-lo para o .foward(req, res); Assim, seria possível fazer este processo de maneira semelhante em todas as situações do gênero.
Acontece que o request, pelo menos no OC4J funciona como um singleton por usuário. Isto é, o request é sempre o mesmo para determinado usuário, apenas os seus valores são atualizados. Não hé como empilhar desta forma pois as referências apontariam sempre para o mesmo request. Outra saída seria clocar ao empilhar, mas o HttpServletRequest não implementa Cloneable… Também não sei se seria necessário empilhar todo o request para restaurar um estado… pode ser possível restaurar o estado apenas com os parameters… Mas como sobrescrever os parameters em um request??? Se não fui bem claro, indiquem em que ponto por favor.
Guilherme,
Implemenar a interface HttpServletRequest toda na unha é um pouco complicado não acha? Concordo em manter o HashMap com os parameters na sessão. É fácil conseguir isso com o método request.getParameterMap(). O problema vem depois. Como colocar este map que acabara de ser empilhado como ultima requisição de volta no request atual e dar um foward para o requestURI da tela de grid?
Assim, a sequencia seria:
Problema: como passar o map salvo anteriormente???
Pessoal,
Valeu as dicas. A solução que consegui foi um pouco baseada na dica de Guilherme. Ao invés de implementar a interface, eu criei um Wrapper que recebe como parâmetro o request original e o map que deve substituir o mapparameter deste request… Para quem não conhece, o Wrapper delega todas as chamadas para o request interno (recebido no construtor - este padrão é semelhante ao decorator). Sendo assim, foi preciso alterar os métodos relacionados aos parameters e usar o map recebido por parâmetro ao invés de usar os parameters contidos no request original.