2013-10-20 3 views
7

मेरे पास एक जेएक्स-आरएस संसाधन है और व्यवसाय तर्क को हल करने के बाद मैं परिणाम जेएसएफ पेज में दिखाना चाहता हूं। मैं उसे कैसे कर सकता हूँ?जेएक्स-आरएस विधि से जेएसएफ पेज पर रीडायरेक्ट कैसे करें?

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

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

     // Business logic... 

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

पहली बार क्लाइंट अभिगम ऐप्लिकेशन url उपयोग कर रहा है, यानी: http://myApp/rest/status, तो कुछ तर्क करते हैं और है कि एक ऐसा पुनर्निर्देशन के आधार पर।

उत्तर

7

ठीक है, मैं एक तरह से आगे करने के लिए एक JAX- से मिल गया है एक जेएसएफ पृष्ठ के लिए आरएस विधि:

@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; 
} 

के रूप में यहाँ वर्णित: https://www.java.net//forum/topic/glassfish/glassfish/forwarding-jsf-jax-rs

विधि के माध्यम से इंजेक्शन भी क्षेत्र में इंजेक्शन के जरिए किया जा सकता है, कि 'वरीयता'

की बात यह TomEE (अपाचे CXF) में परीक्षण किया गया है है। मैं थोड़ा उत्सुक हूं अगर यह सिर्फ एक गंदे "हैक" है या यदि ऐसा करने का एक बेहतर तरीका है।


अद्यतन

मैं लिए एक बेहतर तरीका अनुप्रेषित कि बिना किसी समस्या के JSF टैग renders (मेरे मामले टैग में इस तरह के रूप <p:graphicImage/> सही प्रकार से प्रस्तुत नहीं कर रहे थे)

@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

जावा वर्ग फ़ाइल

public String processPage1(){ 
     return "page"; 
    } 
चेहरे-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> 

यात्रा इस link

+0

इसे पुनर्निर्देशन के लिए करें: '" पृष्ठ 1? चेहर-रीडायरेक्ट = सत्य "' –

+0

इस [लिंक] के माध्यम से जाएं (http://www.mkyong.com/jsf2/jsf-page-forward-vs-page-redirect /) –

+0

यह सिर्फ एक जेएसएफ रीडायरेक्ट है, जैक्स-आरएस विधियों के अंदर केवल लौटा हुआ स्ट्रिंग प्रिंट करेगा, आपके समय के लिए धन्यवाद। – Sergio

0
पाया

आप उन दो समाधानों के बीच चयन कर सकते हैं:

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

और स्वीकृत और अत्यधिक उत्थान वाले उत्तर में अपडेट से यह अलग कैसे है? बस 'इंजेक्शन' हिस्सा? यह 'मामूली' है और वास्तव में समस्या से संबंधित नहीं है – Kukeltje

संबंधित मुद्दे