2010-01-30 6 views
15

JAX-RS has some MVC support, но мне интересно, является ли JAX-RS действительно хорошим выбором для создания веб-приложения для использования человеком.Является ли JAX-RS подходящим в качестве основы MVC?

Если пользователь вводит неправильную или неполную информацию в форме, она должна отображаться снова, как с помощью Grails или Wicket. Есть ли удобный способ сделать это с помощью JAX-RS?

Насколько я знаю, отображение URI работает некорректно, если не указаны все требуемые параметры или возникают проблемы с преобразованием типов (например, с датой). Это верно?

Есть ли поддержка для интернационализированных шаблонов?

Адрес example for a simple JAX-RS based GUI application. Но это действительно просто, и вещи, подобные i18n, и валидация не обсуждаются.

ответ

2

JAX-RS - это Java EE RESTful framework. JavaServer Faces (JSF) - это Java EE MVC framework. Он поддерживает все, что вы упоминали в своем вопросе: postback в ту же форму по ошибке, i8n/l10n и много больше. Чтобы узнать больше о JSF, пройдите Java EE 6 tutorial part II chapters 4-9.

Вы можете сделать немного MVC с JAX-RS, но это не полноценная среда MVC. То же самое можно сказать о том, что вы можете сделать немного RESTful с JSF, но это не полноценная RESTful framework.

Если вы хотите лучшего из обоих миров, я думаю, вам действительно нужно отправиться в Ruby on Rails или Groovy on Rails.

+0

Спасибо. Я знаю JSF, но я ищу что-то RESTful для создания графических приложений. – deamon

+0

Посмотрите на Ruby или Groovy on Rails. – BalusC

+0

Grails - это Ruby on Rails, вдохновленный, но не клоун. Мои два цента, BalusC :) – oligofren

1

В этом вопросе есть много вопросов, я расскажу о двух из них.

«Интересно, действительно ли JAX-RS является хорошим выбором для создания веб-приложений для использования человеком».

Веб-службы обычно предназначены для взаимодействия с машинами, хотя я бы сказал, что обычно люди должны программировать взаимодействия - это нужно сравнить с SOAP, где на данный момент существует гораздо больше возможностей для сгенерированных машин код из WSDL.

«Если пользователь вводит неправильный или неполную информацию в форме»

  • затем в веб-службы RESTful HTTP который принимает HTML форму представления, вы должны вернуть ошибку HTTP 400, поскольку клиент предоставил представление, не соответствует представлению, которое ожидает ваш сервис - клиент должен справиться с ошибкой.
+1

Я согласен с возвратом статуса 400 при отправке неверных данных. Но это само по себе не помогло бы, когда данные были введены в форму. Было бы гораздо лучше выделить поля формы. – deamon

+0

jeez, как вы думаете, что происходит за кулисами в рельсах? вы неоднократно заявляли, что хотите использовать RESTful. Я думаю, вам нужно прочитать, что это значит: http://en.wikipedia.org/wiki/Representational_State_Transfer#Guiding_principles_of_the_interface – oligofren

2

Или возьмите интеграционный подход, чтобы получить лучшее из обоих миров: JAX-RS + MVC.

Реализация JAX-RS JBoss RESTEasy интегрирована с Spring MVC. См http://www.jboss.org/resteasy

Вот небольшой учебник по Resteasy + Spring MVC: http://java.dzone.com/articles/resteasy-spring

+0

Благодарим за сообщение об этой интересной статье! – deamon

5

Да, вы можете, но вы должны очистить голову от старой страницы, после модели и начать думать о приложении как отключенной UI который взаимодействует с SOA RESTful. Когда данные формы введены, они отправляются в конечную точку службы, если данные неверны, тогда вы отвечаете на ошибку с ошибкой, и пользовательский интерфейс обрабатывает эту ошибку. Вы не отправляете бланки на сервер в традиционной модели post-post, а скорее делаете RPC-вызовы в свою заднюю систему.Ваше представление становится полностью отделенным от остальной части стека MVC. Это значительно упрощает замену вида с помощью специальной мобильной или IVR-системы.

Если пользователь вводит неправильную или неполную информацию в форме, она должна отображаться снова, как с помощью Grails или Wicket. Есть ли удобный способ сделать это с помощью JAX-RS?

С помощью богатого интернет-приложения вам не нужно повторно заполнять данные, потому что вы никогда не покидали страницу, на сервер вызывается XHR-вызов, и либо успешный 200 отправлен обратно, либо ошибка. Пользовательский интерфейс затем решает, что делать на основе этого ответа, но страница все еще не повреждена, потому что вызов был вне диапазона из основного потока пользовательского интерфейса.

+1

Это подразумевает использование JavaScript для почти всей связи с сервером, верно? – deamon

+0

Да, это одна из основных концепций, сервер состоит из двух частей, веб-сервера, который предоставляет статический HTML и сервер приложений, который представляет собой серию конечных точек REST для данных и бизнес-логики. Из браузера вы делаете вызовы XHR для получения данных и обработки форм, бизнес-логики. Приятная часть заключается в том, что это дает вам очень тонкий контроль. Например, вы можете проверить форму после ввода всей информации, но вы также можете проверить, было ли имя пользователя взято в том месте, в которое они вошли. Выполняя оба вызова XHR/JAX-RS, у вас есть общая архитектура. – kls

+0

Чтобы прояснить даже мысль, что сервер состоит из двух частей, которые физически могут быть одним и тем же сервером, он просто помогает визуализировать их как два разных объекта. Кроме того, я лично использую CMS, который может экспортировать статический HTML на веб-сервер. Это обеспечивает шаблонизацию без зависимостей во время выполнения. Я не использую JSP, а строю переднюю часть с чистым HTML, CSS и JavaScript. – kls

1

Посмотрите на ReXSL - это фреймворк MVC, поверх JAX-RS. Таким образом, ответ - да, JAX-RS отлично подходит для проектирования MVC.

0

Короткий ответ: ДА.

Он служит в качестве основы для реализации MVC (MVC 1.0 - JSR 371) для Java EE 8. Controller будет JAX-RS фасоли с @Controller аннотацию (по классу или методов).

Для получения дополнительной информации см Мор: MVC 1.0 (JSR 371)

Если вы взяли этот путь в свое время вы сделали действительно хорошее решение, оно должно сделать его более легким для вас, чтобы модернизировать и использовать новые Java EE 8 MVC архитектуры.