Java GUI, описанный в XML
Моя компания в настоящее время оценивает разработку клиента Java FAT. Он должен поддерживать динамический графический интерфейс и иметь как можно больше логики на стороне сервера. Поэтому возникла идея отправить экран в виде XML клиенту FAT, показать его пользователю и отправить введенные данные, похожие на "html форму", обратно в структуру, такую как:
<fields>
<field type="checkbox" name="active" checked="false" x="10" y="10" />
<field type="textbox" name="username" value="dummy" x="10" y="30" />
<field type="selection" name="group" selectedIndex="1" x="10" y="50">
<data index="0">user</data>
<data index="1">admin</data>
</field>
<field type="button" name="ok" x="10" y="70" />
<field type="button" name="cancel" x="10" y="90" />
</field>
Фон
Спонсор ищет приложение для ввода и просмотра данных, которое они могут адаптировать к своим потребностям путем простого изменения конфигурации. Следовательно, мы должны предоставить администраторам возможность создавать так называемые "экраны" (формы) и предоставлять клиент-серверную систему, позволяющую им распространять их среди своих конечных пользователей. Входящие данные (т. Е. Данные, введенные пользователем) будут затем пересылаться в уже существующее ядро рабочего процесса, которое обрабатывает бизнес-логику.
Вопрос
Кто-нибудь разработал что-то подобное? Какие библиотеки вы бы предложили? Есть плюсы и минусы? Большое спасибо!
Обновить
Большое спасибо за ваш вклад, Thinlet выглядит очень многообещающе так же, как и JavaFX - я рассмотрю оба.
8 ответов
Когда я в последний раз искал такую вещь, двумя вариантами были Thinlet и Apache Jelly.
Плюсом было то, что вы можете отделить проводку и конструкцию вашего приложения от поведения. Я не уверен в жизнеспособности любого из них, чтобы сделать это, но я предполагаю, что может быть некоторая функциональность для перевода в другой инструментарий, так же как Lazlo может переводить в AJAX и Flash.
Прежде чем я нашел их, я написал аналогичный инструментарий (когда Echo был передовым, а Java 1.3 - передовым), основанный на JHTMLEditor. Это работало, но слушатели работали в той же виртуальной машине, что и средство визуализации.
Это поднимает вопрос, который @Draemon делает в контексте клиент / сервер, и я должен был бы спросить, является ли это плодотворным способом решения более крупной проблемы. Я предполагаю, что вы хотите разгрузить много циклов ЦП на клиенте? Возможно, если вы добавите немного больше, мы сможем сделать больше предложений? Это указывает на подход, при котором ваше приложение разворачивается на рабочем столе как localhost
веб-сервер, и вы обслуживаете страницы в локальном браузере.
Если вы можете подождать, я подожду и дождусь JavaFX, поскольку это сделает сборку апплетов более декларативной, а также сократит первоначальную загрузку библиотеки рендеринга.
"Он должен поддерживать динамический графический интерфейс и иметь как можно больше логики на стороне сервера".
То, что вы описываете, это веб-приложение. Клиент уже написан (браузер), а формат XML (ish) - (X)HTML.
Можно было бы воссоздать этот процесс, используя ваш собственный формат XML и ваш собственный клиент, но я не понимаю, почему это необходимо или желательно.
В основном вы отправляете сериализованные формы клиенту и сериализуете полученные данные. Это можно сделать с помощью сериализации Java, т. Е. RMI, но брандмауэры и т. Д. Могут усложнить использование RMI в Интернете.
Если вы хотите использовать XML по HTTP в сети, вы можете взглянуть на java.beans.XMLEncoder. XMLEncoder ориентирован на сериализацию компонентов пользовательского интерфейса, но он также хорошо работает для сериализации POJO. По сути, это будут объекты модели, которые заполняются пользовательским вводом в клиенте FAT.
Существует довольно много наборов инструментов на основе XUL для различных языков, включая Java. Я думаю, что Thinlet делает очень упрощенный XUL для Java, но должны быть и другие.
Попробуйте JavaFX ( Википедия о JavaFX). Это не XML, но это также легко и декларативно.
Сделали нечто подобное с SWT, хотя это было преобразование логической структуры данных (в данном случае модели формы приложения) в графический интерфейс, а не указание графического интерфейса напрямую. Это позволило нам провести рефакторинг GUI в зависимости от свойств клиента (PocketPC или Desktop), потому что модель данных была скорее семантической, чем диктаторской.
Написание парсеров и генераторов XML очень просто. Написание чего-либо для генерации интерфейса из модели не так просто, так как вам нужно хранить отношения между элементами GUI и полями модели, к которым они относятся, чтобы вы могли обновлять их при внесении изменений, а не обычный жестко закодированный слушатель на каждом GUI элемент
Посмотрите на рамки ofbiz. он использует виджеты (xml) и через обработчики закрывает их для вывода http://ofbiz.apache.org/
Попробуйте QT Jambi. Это позволяет вам создавать макеты форм в QT Designer и экспортировать их как файл дескриптора того типа, который вы описали.