【问题标题】:RESTeasy and Returning to a JSP page with a modelRESTeasy 和返回带有模型的 JSP 页面
【发布时间】:2010-11-05 21:13:33
【问题描述】:

是否有一种简单的、不使用 spring 的方法让 RESTeasy 返回带有模型的 jsp 或 html 页面?我想做一些类似于 spring ModelAndView 的事情,我有一个请求说 /contacts/loomer 并让它在 jsp 模板中返回一个模拟对象。我看到的所有示例都是针对 JSON/XML 的。我知道在泽西岛你可以使用可视化,但我只需要使用 RESTeasy 的东西。

谢谢!

我想要这样的东西(但没有弹簧模型和视图):

   @POST
   @PUT
   @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
   @Produces(MediaType.TEXT_HTML)
   public ModelAndView saveContactForm(@Form Contact contact)
         throws URISyntaxException
   {
      service.save(contact);
      return viewAll();
   }

【问题讨论】:

    标签: model-view-controller jboss resteasy


    【解决方案1】:

    好的,我想给有兴趣的人看看。一旦我找到一个例子,它实际上是相当微不足道的。

    @GET
    @Path("{eventid}")
    @Produces("text/html")
    public void getEvent(@Context HttpServletResponse response,
            @Context HttpServletRequest request,
            @PathParam("eventid") Long eventid) throws ServletException,
            IOException {
    
        EventDao eventdao = DaoFactory.getEventDao();
        Event event = eventdao.find(eventid);
    
        request.setAttribute("event", event);
        request.getRequestDispatcher("eventView.jsp").forward(request, response);
    
        }
    

    【讨论】:

    • 我想知道这是否是一种受支持的方式,或者它只是实现的副作用。我希望是前者:-)
    • 如果您将 REST 服务映射到上下文“/*”的根目录(即没有“resteasy.servlet.mapping.prefix”),您可能会遇到问题,因为 RestEasy 也会尝试处理请求“事件视图.jsp”。作为一种解决方法,您可以为每个 jsp 声明一个 servlet 映射:/
    【解决方案2】:

    使用org.jboss.resteasy.resteasy-html 版本3.0.6.Final,您可以直接访问HttpServletRequest 并在将输出定向到RESTEasy View 之前注入您自己的属性。

    @GET
    @Path("{eventid}")
    @Produces("text/html")
    public View getEvent(@Context HttpServletResponse response,
                         @Context HttpServletRequest request,
                         @PathParam("eventid") Long eventid){
    
        EventDao eventdao = DaoFactory.getEventDao();
        Event event = eventdao.find(eventid);
    
        request.setAttribute("event", event);
        return new View("eventView.jsp");
    }
    

    这模拟了Htmleasy 插件的某些行为,而无需重新连接您的web.xml

    【讨论】:

    • 什么是 RESTeasy 视图对象?我有类似的问题。我很惊讶 RESTEasy 的这些部分的文档记录如此之差。
    • http://docs.jboss.org/resteasy/docs/3.0.6.Final/javadocs/index.html 在我看来,RESTEasy 更喜欢返回 json 或 xml。将其用作返回 jsp 视图的 MVC 会拉伸模型。我敢打赌这就是编写 Htmleasy 的原因。
    【解决方案3】:

    我对上述答案投了赞成票,但它似乎可以与 RestEasy 一起工作,直到 2.3.2.Final,最新的是 2.3.5.Final(今天)。与 Glassfish 3.1.2.2 捆绑的 Jersey 似乎也可以正常工作。

    当我尝试时,这不适用于 2.3.2.Final 以上的 RestEasy。我想分享这个观察结果,因为我花了一段时间才弄清楚是什么原因导致 'java.lang.ClassCastException: $Proxy262 cannot be cast to org.apache.catalina.core.ApplicationHttpRequest'

    但我并不想深入研究如何解决它,我遇到了一些想法https://stackoverflow.com/a/5149950/1398360

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-12
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多