Як реалізувати спеціальний ViewProcessor <T> (jax-rs)?

Looking at the article here, there is an example of how to use a TemplateProcessor to resolve JSP views using Jersey. Apparently this class has been deprecated now and replaced by ViewProcessor. I am somewhat confused about how to implement either (preferably the newer one since it isn't deprecated); what goes in as the template argument? How can I implement one to simply resolve jsps in /WebContent/WEB-INF/views/* and also evaluate the expression language of the returned view?

The other ViewProcessor article is here.

Дякую.

1

1 Відповіді

ViewProcessor має бути реалізований, якщо ви хочете підключити підтримку для нового типу шаблонів. Якщо все, що вам потрібно, є шаблони JSP, то це вже вбудовано в Джерсі, і вам не потрібно впроваджувати свій власний ViewProcessor.

Якщо ваші JSP-файли розташовані під переглядом WEB-INF /, тоді ви можете встановити JSP_TEMPLATES_BASE_PATH параметр входу до WEB-INF/переглядів. Потім вам просто потрібно повернути новий екземпляр Viewable з вашого ресурсного методу (як показано на блозі Павла, на який ви звертаєтесь) і передавати ім'я шаблону як перший параметр і дані (модель) як другий параметр конструктору. Потім у JSP можна отримати доступ до даних за допомогою атрибута з ім'ям "it".

ОНОВЛЕННЯ: якщо ваш url-шаблон "/ *", це дещо складніше. Джерсі не в змозі вирішити шаблони при делегуванні до контейнера, оскільки сервлет Джерсі маскує JSP. Щоб контейнер міг бачити JSP, потрібно зробити ще дві речі:

  1. register the Jersey servlet as a filter instead of a servlet (simply replace occurrences of servlet by filter in your web.xml) - see the bottom of this javadoc page: http://jersey.java.net/nonav/apidocs/latest/jersey/com/sun/jersey/spi/container/servlet/package-summary.html
  2. add PROPERTY_WEB_PAGE_CONTENT_REGEX init param to the filter and set it to the regular expression that the jsp templates match (e.g. "/WEB-INF/views/.*")

If you still believe you have to implement a custom ViewProcessor for some reason, you can look at how the freemarker view processor is implemented and get inspired by that - see http://java.net/projects/jersey/sources/svn/content/trunk/jersey/contribs/jersey-freemarker/src/main/java/com/sun/jersey/freemarker/FreemarkerViewProcessor.java?rev=5453

3
додано
В ПОРЯДКУ. Це пояснюється тим, що, як стверджує стаття, Jersey шукає шаблони в наступному каталозі: /. Тобто, якщо клас ресурсу, що повертає Viewable, є com.acme.myproject.FooResource, і ви шукаєте "вітання", то Джерсі намагатиметься знайти його як WEB-INF/views/com/acme/myproject/FooResource/welcome. jsp. Якщо ваш шаблон знаходиться в корені шляху бази шаблонів, потрібно вказати ім'я шаблону косою рисою - тобто повернути новий вид ("/ welcome", changeList);
додано Автор Martin Matula, джерело
Добре, проблема полягає в шаблоні URL-адрес. Я оновлюю свою відповідь інформацією про те, що робити, якщо ваш шаблон URL-адреси "/ *".
додано Автор Martin Matula, джерело
Залежить від того, який контейнер використовується. Вам потрібно встановити кореневий контекст до потрібного значення. Для GlassFish це робиться в glassfish-web.xml, додаючи наступний елемент під коренем:
додано Автор Martin Matula, джерело
Я спробував додати init param і виклик для повернення перегляду, але перегляд ще не може бути вирішений: com.sun.jersey.config.property.JSPTemplatesBaseP & zwnj; ath WEB-INF/перегляди і повернення нового видимого ("вітання", changeList); і файл welcome.jsp на WEB-INF/views/welcome.jsp
додано Автор Blaskovicz, джерело
Це має сенс, на жаль, це не працює для мене - я не отримую невирішеного виключення, але я не бачу жодного вигляду (HTTP 404). Чи має значення, що мої url-шаблони сервлетів є/*? Чи є у вас якісь додаткові ідеї? Я дійсно несподівано/розчарований.
додано Автор Blaskovicz, джерело
Одна річ, яку я помітив під час налагодження, полягає в тому, що роздільна здатність перегляду для класу null - це звучить неправильно, чи не так?
додано Автор Blaskovicz, джерело
Велике спасибі soo! Я дуже ціную це, зараз все працює. Одне останнє питання, як ви змінюєте базову URL-адресу вашої програми? Я спробував налаштувати ім'я та змінити назву проекту, але він завжди використовує ім'я старого проекту.
додано Автор Blaskovicz, джерело
Я використовую tomcat, я спробую це у файлі web.xml
додано Автор Blaskovicz, джерело
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників