如何从JAX-RS方法重定向到JSF页面?

Ser*_*gio 7 jsf redirect jax-rs java-ee

我有一个JAX-RS资源,在解析业务逻辑后,我想在JSF页面中显示结果.我怎样才能做到这一点?

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

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

        // Business logic...

        return "results.xhtml"; // how to return a jsf page? 
    }
}
Run Code Online (Sandbox Code Playgroud)

客户端第一次访问应用程序时使用的是url,即:http://myApp/rest/status然后执行一些逻辑并基于此进行重定向.

Ser*_*gio 7

好吧,我找到了一种从JAX-RS方法转发到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;
}
Run Code Online (Sandbox Code Playgroud)

如下所述:https://www.java.net//forum/topic/glassfish/glassfish/forwarding-jsf-jax-rs

通过该方法的注入也可以通过现场注入来完成,这是"偏好"的问题.

这已经在TomEE(Apache CXF)中进行了测试.如果这只是一个肮脏的"黑客"或者有更好的方法,我只是有点好奇.


UPDATE

我找到了一种更好的重定向方法,可以在没有任何问题的情况下呈现JSF标记(在我的情况下标记,例如<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();
}
Run Code Online (Sandbox Code Playgroud)