Caros, bom dia.
Estou fazendo um trabalho acadêmico e estou tendo o seguinte problema.
Tenho um jsp principal que chamo de painel, neste jsp tenho um menu feito com as tags <ul><li></li></ul>
e css como pode ser observado na imagem abaixo.
Quando clico em Gestão de Usuários <li><a href="javascript:loadContent('#main-content','BracosAbertosController?cmd=viewUsuarios');" tabindex="5">Gestão de Usuários</a></li>
eu exibo o conteudo do meu jsp viewUsuarios gerado pelo controller dentro do div #main-content utilizando a função load do JQuery.
Até aqui tudo bem e funcionando perfeitamente, o problema é que quando submeto a viewUsuarios com as operações de pesquisa, inclusão, alteração e exclusão não consigo fazer com que as respostas do controller sejam exibas dentro da minha div #main-content.
Já fiz alguns testes com forward, include e sendRedirect e não obtive muito sucesso, contudo venho aqui pedir uma ajuda aos colegas.
Não estou utilizando nenhum framework pois não é o objetivo do trabalho.
Aguardo o retorno.
Acho que solucao seria voce jogar a resposta do controller em request e obter ela depois na view.
exemplo:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
String paginaJSP = "usuario/listarUsuario.jsp";
forwardTemplate(paginaJSP, request, response);
}
public void forwardTemplate(String jsp, HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException{
request.setAttribute(CONST_TEMPLATE, CAMINHO_JSP+jsp);
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(response.encodeURL(TEMPLATE));
dispatcher.forward(request, response);
}
Na sua JSP:
<jsp:include page="<%=(String)request.getAttribute(SialiServlet.CONST_TEMPLATE)%>" />
Olá surfzera, obrigado pela dica.
Fiz algumas adaptações no código que você sugeriu e funcionou do jeito que eu precisava, porém a url inicial não foi preservada.
url antes da pesquisa: http://localhost:8080/BracosAbertos/Painel.jsp
url depois da pesquisa: http://localhost:8080/BracosAbertos/BracosAbertosController
Pelo que já estudei a única forma de mudar a url é usando sendRedirect(), mas, não sei dizer se funcionaria e além do mais eu teria de colocar o atributo do nome da página na session.
Você daria mais alguma sugestão?
Desde já agradeço pela ajuda.
funciona sim… basta algumas adaptacoes vamos la, tentar ver se consigo ajudar
public void forwardTemplate(String jsp, HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException{
//Se o parametro jsp comecar com redirect, entao faz o redirect para a jsp.
if ( jsp!=null && jsp.startsWith(“redirect”)){
jsp = jsp.replaceAll(“redirect”, “”);
redirect(jsp, request, response);
}else{
//senao dispacha para a pagina
request.setAttribute(CONST_TEMPLATE, CAMINHO_JSP+jsp);
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(response.encodeURL(TEMPLATE));
dispatcher.forward(request, response);
}
}
public void redirect(String redirecao, HttpServletRequest request, HttpServletResponse response) throws IOException{
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+
request.getServerPort()+path+"/"+redirecao.trim();
response.sendRedirect(basePath);
}
ai voce pode tentar utilizar de duas formas :
String paginaJSP = “usuario/listarUsuario.jsp”;
ou
String paginaJSP = “redirect usuario/listarUsuario”;
forwardTemplate(paginaJSP, request, response);
O Layout ficou bem bacaninha em !
Olá joaoorso, também achei que ficou legal mas dá muito trabalho para combinar as cores e posicionar os elementos na tela. Eu não estou usando nenhum framework ou Taglib só html/CSS/JavaScript/JSP/Servlets na unha, ainda falta fazer algumas validações no lado do cliente e no servidor para ficar bom mesmo.
Surfzera, ainda não tive tempo para testar a sua última sugestão, amanhã vou fazer mais alguns testes e posto os resultados.
Aproveitando o gancho, eu estou passando por outro problema quando termino de fazer uma inclusão/alteração e redireciono para o jsp da view de usuários.
É o seguinte caso eu venha a precionar F5 ou Ctrl +R a jsp é submetida novamente e isso está gerando novas inclusões ou alterações no meu banco, ainda não fiz uma investigação a fundo para ver o que está acontecendo, mas acredito que o problema esteja nos parâmetros do request que não estão sendo reinicializados “É uma suposição”, ou o problema também pode está ligado a url que fica no browser após uma operação após estas operações http://localhost:8080/BracosAbertos/BracosAbertosController.
BracosAbertosController -> É um ServletController geral da aplicação todas as requisões post/get da view são submetidas para ele com base em um protocolo de comandos e parâmetros.
pode ser que você esteja colocando algums parametros em sessao ao inves de request por isso acontece o problema … se vc tiver mesmo que colocar em sessao mande limpar os atributos sempre.