2013-10-20 13 views
7

Ho una risorsa JAX-RS e, dopo aver risolto la logica aziendale, voglio mostrare i risultati in una pagina JSF. Come lo posso fare?Come reindirizzare alla pagina JSF dal metodo JAX-RS?

@Path("/rest") 
public class PaymentServiceRest { 

    @GET 
    @Path("/status") 
    public String method() { 

     // Business logic... 

     return "results.xhtml"; // how to return a jsf page? 
    } 
} 

La prima volta che l'accesso client l'applicazione è utilizzando l'URL, cioè: http://myApp/rest/status, poi fare qualche logica e in base a che fare una redirezione.

risposta

7

Beh, ho trovato un modo per avanti da un JAX- Metodo RS a una pagina JSF:

@GET 
@Path("/test") 
@Produces("text/html") 
public Response test(@Context ServletContext context, 
     @Context HttpServletRequest request, 
     @Context HttpServletResponse response) { 

    try { 
     String myJsfPage = "/response.xhtml"; 
     context.getRequestDispatcher(myJsfPage).forward(request, response); 
    } catch (ServletException | IOException ex) { 
     return Response.status(NOT_FOUND).build(); 
    } 
    return null; 
} 

Come descritto qui: https://www.java.net//forum/topic/glassfish/glassfish/forwarding-jsf-jax-rs

L'iniezione tramite il metodo può essere effettuata anche tramite l'iniezione nei campi, che è una questione di 'preferenza'

Questo sono stati testati in TomEE (Apache CXF). Sono solo un po 'curioso se questo è solo un "trucco" sporco o se c'è un modo migliore per farlo.


UPDATE

Ho trovato un modo migliore per reindirizzare che rende i tag JSF senza problemi (nel mio caso i tag come <p:graphicImage/> non erano il rendering correttamente)

@GET 
@Path("/test") 
@Produces("text/html") 
public Response test(@Context HttpServletRequest request, @Context HttpServletResponse response) 
     throws IOException { 
    String myJsfPage = "/response.xhtml"; 
    String contextPath = request.getContextPath(); 
    response.sendRedirect(contextPath + myJsfPage); 
    return Response.status(Status.ACCEPTED).build(); 
} 
-1

file di classe Java

public String processPage1(){ 
     return "page"; 
    } 

in faces-config.xml

<navigation-case> 
     <from-action>#{navigationController.processPage1}</from-action> 
     <from-outcome>page</from-outcome> 
     <to-view-id>page1.jsf</to-view-id> 
    </navigation-case> 

visita questa link

+0

fare questo per il reindirizzamento: '" pagina1? Faces-redirect = true "' –

+0

passare attraverso questo [collegamento] (http://www.mkyong.com/jsf2/jsf-page-forward-vs-page-redirect /) –

+0

questo è solo un reindirizzamento jsf, all'interno dei metodi jax-rs verrà stampata solo la stringa restituita, grazie per il vostro tempo. – Sergio

0

È possibile scegliere tra queste due soluzioni:

import java.io.IOException; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.Response.Status; 

@Path("/rest") 
public class PaymentServiceRest { 

    @Context 
    private HttpServletRequest request; 
    @Context 
    private HttpServletResponse response; 

    /** 
    * This method uses the injected request/response in the PaymentServiceRest class 
    * @return 
    * @throws IOException 
    */ 
    @GET 
    @Path("/status1") 
    @Produces("text/html") 
    public Response method1() throws IOException { 
     String myJsfPage = "/views/index.xhtml"; 
     String contextPath = request.getContextPath(); 
     response.sendRedirect(contextPath + myJsfPage); 
     return Response.status(Status.ACCEPTED).build(); 
    } 

    /** 
    * This method uses the injected request/response passed as parameters 
    * @return 
    * @throws IOException 
    */ 
    @GET 
    @Path("/status2") 
    @Produces("text/html") 
    public Response method2(@Context HttpServletRequest request, @Context HttpServletResponse response) 
      throws IOException { 
     String myJsfPage = "/views/index.xhtml"; 
     String contextPath = request.getContextPath(); 
     response.sendRedirect(contextPath + myJsfPage); 
     return Response.status(Status.ACCEPTED).build(); 
    } 
} 
+0

E in che modo questo è diverso dall'aggiornamento nella risposta accettata e con una buona spinta verso l'alto? Solo la parte 'iniezione'? Questo è 'banale' e non è realmente correlato al problema – Kukeltje

Problemi correlati