Jsf - url amigável redirecionada a um certo objeto

3 respostas
A

primeiramente estou abrindo este tópico pois não sei por onde começar… se vai ser um servlet, framework, etc…

To com uma grande dúvida… eu estou fazendo um site/blog onde as pessoas cadastram e fazem post…

ao entrar tem uma lista de post, e quando alguem clica em um post vai para uma página e exibe o post inteiro

então é +ou- assim;

o cara entra na index.xhtml e ve a lista de post

ai ele clica em um post e vai para abrir-post.xhtml mostrando um post

então na URL temos projeto.com.br/index.xhtml e depois projeto.com.br/abrir-post.xhtml

eu queria fazer algo assim:

projeto.com.br/index
projeto.com.br/abrir-post/aqui-o-titulo-do-post

uma pergunta… eu vi uns tópicos sobre URL amigável, mais nao eh bem isso… pq na verdade eu não tenho nem a url sem ser amigável, por exemplo eu não tenho nem abrir-post?id=1

eu teria que fazer um servlet? algo assim? como eu faço para capturar o /abrir-post/titulo-do-post e exibir o post corretamente?

meu projeto:

  • jsf 2
  • primefaces (em algumas coisas)
  • hibernate

eu uso o padrao de projeto
modelo, dao, daoimp, controller (managedbeans)

[edit] esqueci de mencionar… e uso Spring Security para autenticação dos usuários… então tudo que ta na /*.xhtml é acesso livre… /usuario e /admin é restrito

  • acredito que isso nao implica em nada…

3 Respostas

L

alandiniz você consegue fazer com que tudo depois da ‘/’ Ex. ( projeto/.xhtml) não seja mostrado usando Spring Security. Ou seja
não quero deixar o usuário ver qual página está sendo passada pela URL quando ele clica em alguma ação.

A

Luis obrigado pela resposta rápida, vou dar uma pesquisada sobre isso que você me disse, parece ser interessante…

eu consegui achar o que preciso aqui: http://www.devmedia.com.br/artigo-java-magazine-58-quickupdate-urls-amigaveis-em-aplicacoes-web/9460

essa parte descreve exatamente o que preciso:

site.com/post/nome-do-post
convertido
site/busca.xhtml?titulo=nome-do-post

pelo que vi da pra usar servlet
mais tem essa lib urlrewrite que faz automatico… vou dar uma pesquisada maior e qlqr coisa posto aqui

se alguem tiver um exemplo simples de usar a urlrewrite por favor poste aqui, irá ajudar futuros GUJ’s members ^^

A

será que to fazendo gambiarra? huahua ou é o correto? muitas vezes me pergunto isso :frowning:

eu fiz o teste implementando o extends do httpservlet e implementei a classe doGet
quando eu passo no navegador
projeto/PostController?titulo=nome-do-post

realmente funciona… na parte (System.out.println("nome do post: " + post.getTitulo()):wink: realmente me traz o nome do post, e se eu coloco pra imprimir no console no system.out por exemplo post.getUsuario ou post.getId ele mostra certinho… então o que eu fiz ta dando certo… porém quando ele redireciona pra /abre-post.xhtml ele nao carrega o post…

porém no meu index.xhtml na lista de posts quando eu clico em um post ele vai pra mesma página abre-post e carrega o post normal…

package br.com.techsquare.controller;

//omitido os imports do meu projeto
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.primefaces.event.FileUploadEvent;

/**
 *
 * @author Alan
 */
@ManagedBean
@SessionScoped
public class PostController extends HttpServlet {

    private Post post;
    private PostDAO dao = new PostDAOImp();
    private Mensagens msg = new Mensagens();
    private List<Categoria> categorias;
    private List<Post> posts;
    private CategoriaDAO catDao = new CategoriaDAOImp();
    private PostDAO postDao = new PostDAOImp();

    public PostController() {
        long t1 = System.currentTimeMillis();
        try {
            if (post == null) {
                post = new Post();
            }
            if (categorias == null) {
                categorias = new ArrayList<Categoria>();
                categorias = catDao.list();
            }
            if (posts == null) {
                posts = new ArrayList<Post>();
                posts = postDao.list();
            }
        } catch (Exception e) {
            msg.enviar(msg.ERRO_SISTEMA);
        }
        long t2 = System.currentTimeMillis();
        System.out.println("PostController - construtor: " + (t2 - t1));
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        String titulo = request.getParameter("titulo");
        System.out.println("entro no doGet com o titul: " + titulo);
        if(titulo != null || titulo != ""){
            post = new Post();
            post = dao.getPostsTitulo(titulo);
            System.out.println("pego o post");
            PostController pc = new PostController();
            pc.setPost(post);
            System.out.println("nome do post: " + post.getTitulo());
        }
        response.sendRedirect("/abre-post.xhtml");
    }

    public String enviarPost() {
        post = new Post();
        return "enviar-post.xhtml";
    }

    public String verPost(Post post) {
        long t1 = System.currentTimeMillis();
        try {
            this.post = dao.getPostId(post.getId());
            int cliques = post.getCliques();
            post.setCliques(cliques + 1);
            dao.update(post);
        } catch (Exception e) {
        }
        long t2 = System.currentTimeMillis();
        System.out.println("PostController - verPost: " + (t2 - t1));
        return "abre-post.xhtml";
    }


    public void salvarPost() {
        try {
            UsuarioController uc = new UsuarioController();
            post.setUsuario(uc.getUsuario());
            post.setDtcadastro(new Date());
            dao.save(post);
            msg.enviar(msg.POST_OK);
            post = new Post();
         } catch (Exception e) {
            msg.enviar(msg.ERRO_SISTEMA);
        }
    }

//getters and setters omitidos
}
Criado 12 de abril de 2012
Ultima resposta 12 de abr. de 2012
Respostas 3
Participantes 2