【问题标题】:JSON Renderkit - or how do I return JSON to a JSF client?JSON Renderkit - 或者我如何将 JSON 返回给 JSF 客户端?
【发布时间】:2011-07-11 18:29:00
【问题描述】:

我正在使用 jQuery 对 JSF 2.0 服务器进行 AJAX 调用。我调用的“页面”看起来像这样:

<ui:composition template="/templates/jsonTemplate.xhtml">
    <ui:define name="content">
    #{tabBean.jsonUrl}
    </ui:define>
</ui:composition>

我的 jsonTemplate.xhtml 看起来像这样:

<html xmlns:ui="http://java.sun.com/jsf/facelets">
    <ui:insert name="content" />
</html>

发送到客户端的结果包含我的 JSON 对象和 HTML 标记,我必须在客户端上将其剥离。

我想要返回的是一个纯 JSON 对象。

{ "url" : "/this/is/my/url.xhtml" }

在客户端,我去掉 和 标签,使用 jQuery 解析 JSON 并返回一个 JSON 对象。我试图指定没有 HTML 标签的模板,但它抱怨了。似乎这是我能产生的最低限度的响应。

我想要一个 RenderKit,它可以让我只返回纯 JSON。

【问题讨论】:

    标签: ajax json jsf facelets


    【解决方案1】:

    我建议您使用带有 Jaxson 提供程序的 RESTEasy 库。从它开始并不难。 正确配置后,您只需对服务器执行 ajax 请求。 Java 代码就像这样:

    @POST
    @Path("/getPossiblePhases")
    @Encoded
    @Produces("application/json")
    public List<Process> getPossiblePhases(@FormParam("prfID") Long prfID){
        return new List<Process>(); // some list here for example
    }
    

    作为响应,您只会得到 JSON。 Ofc 它支持 xml、GET 请求并具有许多其他功能。支持弹簧。

    【讨论】:

      【解决方案2】:

      只是不要发出那些 HTML 标签。

      替换

      <html xmlns:ui="http://java.sun.com/jsf/facelets">
          <ui:insert name="content" />
      </html>
      

      <ui:composition xmlns:ui="http://java.sun.com/jsf/facelets">
          <ui:insert name="content" />
      </ui:composition>
      

      然而,为此使用网络服务确实要好得多。 JSF 是基于组件的 MVC 框架,而不是 Web 服务框架。看看 JAX-RS/JAX-WS。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-04
        • 2020-11-22
        • 2013-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多