2010-08-20 5 views
1

est-il possible de charger la page jsf 2 à partir de la base de données, pas à partir du fichier xhtml? Par exemple, la requête vient pour /faces/foo.xhtml, FacesServet intercepte la requête et VieHanlder crée la vue foo.xhtml en chargeant foo.xhtml à partir d'une base de données, pas du serveur?Servir JSF à partir de la base de données

Merci

Répondre

0

Il est théoriquement possible si vous le mettez de la base de données dans la webcontent publique là où le FacesServlet exactement attendre que ce soit, avant qu'il entre en jeu. Un Filter est adapté pour le travail.

Voici un exemple de coup d'envoi:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    HttpServletRequest req = (HttpServletRequest) request; 
    String rootPath = req.getSession().getServletContext().getRealPath("/"); 
    String fileName = req.getServletPath().substring(1); 
    File file = new File(rootPath, fileName); 

    if (!file.exists()) { 
     InputStream input = null; 
     OutputStream output = null; 

     try { 
      input = yourDAO.find(fileName); 
      output = response.getOutputStream(); 
      byte[] buffer = new byte[10240]; 
      for (int length = 0; (length = input.read(buffer)) > 0;) { 
       output.write(buffer, 0, length); 
      } 
     } finally { 
      if (output != null) try { output.close(); } catch (IOException ignore) {} 
      if (input != null) try { input.close(); } catch (IOException ignore) {} 
     } 
    } 

    chain.doFilter(request, response); 
} 

Plan sur la <servlet-name> du FacesServlet.

Questions connexes