Как реализовать пользовательский ViewProcessor <T>(jax-rs)? - PullRequest
1 голос
/ 28 октября 2011

Глядя на статью здесь , приведен пример использования TemplateProcessor для разрешения представлений JSP с использованием Джерси.Очевидно, этот класс уже устарел и заменен на ViewProcessor .Я несколько озадачен тем, как это реализовать (желательно более новый, поскольку он не устарел);что входит в качестве аргумента шаблона?Как реализовать один, чтобы просто разрешить jsps в / WebContent / WEB-INF / views / *, а также оценить язык выражений возвращаемого представления?

Другая статья ViewProcessor находится здесь.

Спасибо.

1 Ответ

3 голосов
/ 28 октября 2011

ViewProcessor должен быть реализован, если вы хотите подключить поддержку нового типа шаблонов.Если вам нужны только шаблоны JSP, то они уже встроены в Джерси, и вам не нужно реализовывать свой собственный ViewProcessor.

Если ваши файлы JSP находятся в WEB-INF / views, вы можете установить JSP_TEMPLATES_BASE_PATH параметр инициализации для WEB-INF / views.Затем вам просто нужно вернуть новый экземпляр Viewable из вашего метода ресурса (как показано в блоге Пола, на который вы ссылаетесь) и передать имя шаблона в качестве первого параметра, а данные (модель) - в качестве второго параметра конструктору.Затем в JSP вы можете получить доступ к данным с помощью атрибута с именем "it".

UPDATE: если ваш url-шаблон "/ *", он немного сложнее.Джерси не может разрешить шаблоны при делегировании в контейнер, поскольку сервлет Джерси маскирует JSP.Чтобы контейнер мог видеть JSP, вам нужно сделать еще две вещи:

  1. зарегистрировать сервлет Джерси как фильтр вместо сервлета (просто замените вхождения сервлета на фильтр в вашемweb.xml) - смотрите в нижней части этой страницы javadoc: http://jersey.java.net/nonav/apidocs/latest/jersey/com/sun/jersey/spi/container/servlet/package-summary.html
  2. add PROPERTY_WEB_PAGE_CONTENT_REGEX initm для фильтра и установите его в регулярное выражение, которое соответствуют шаблонам jsp (например,/WEB-INF/views/.*")

Если вы все еще считаете, что по какой-то причине вам необходимо реализовать собственный ViewProcessor, вы можете посмотреть, как реализован процессор представления freemarker, и получить вдохновение отчто - см. http://java.net/projects/jersey/sources/svn/content/trunk/jersey/contribs/jersey-freemarker/src/main/java/com/sun/jersey/freemarker/FreemarkerViewProcessor.java?rev=5453

...