JSON Renderkit - или как вернуть JSON клиенту JSF? - PullRequest
1 голос
/ 11 июля 2011

Я делаю AJAX-вызов с использованием jQuery на сервер JSF 2.0. «Страница», на которую я звоню, выглядит примерно так:

<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.

Ответы [ 2 ]

0 голосов
/ 13 января 2012

Только не используйте эти теги 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, а не платформа веб-служб.Посмотрите на JAX-RS / JAX-WS.

0 голосов
/ 13 января 2012

Я бы посоветовал вам использовать библиотеку RESTEasy с провайдером Jaxson. Начать с этого не сложно. После правильной настройки вам нужно будет только выполнить 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-запросы и имеет множество других функций. Поддерживает весну.

...