У меня есть приложение с четко определенным интерфейсом. Он использует CDI для разрешения модулей (в частности, он использует точки внедрения Instance <> на интерфейсах API для разрешения модулей) и передает различные данные обратно и четвертым через интерфейсы без проблем. Я намеренно держал API и реализацию отдельно, а модули наследуются только от API, чтобы избежать тесной связи, а приложение знает о модулях только через зависимости времени выполнения и передачу данных через API. Приложение работает нормально без модулей, которые можно добавить, просто поместив jar в папку WEB-INF / lib и перезапустив сервер приложений.
Проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы модули создавали часть представления, и поэтому я хочу вызывать переносимым способом либо компонент JSF, либо делать включение из модуля по порядку. чтобы он сделал свое мнение. Я уже решил, какой модуль я хочу вызвать, и у меня есть ссылки на интерфейс модуля. Первоначально я думал, что это нужно сделать, это сделать пользовательский интерфейс: include, который просит модуль указать, где находится шаблон представления, но я понятия не имею, как ответить на этот запрос осмысленно, поскольку разрешение представления выполняется из приложения. корень, а не корень библиотеки.
Резюме заключается в том, что я понятия не имею, как перейти от приложения к библиотеке с помощью JSF для файлов .xhtml (шаблон / компонент).
Было бы неплохо использовать CC, но как мне указать, что я хочу, чтобы конкретный экземпляр CC во время выполнения вместо того, чтобы жестко кодироваться на странице?
Я, конечно, могу напрямую вызывать код приложения и запрашивать его для разметки, но это кажется грубой силой, и когда у меня есть разметка, я не совсем уверен, как сказать JSF, чтобы она оценивалась. Тем не менее, я могу представить компонент, который будет брать путь к ресурсу, захватывать разметку и оценивать ее, возвращая завершенную разметку, я просто не знаю, как это реализовать.
Я бы предпочел избегать принуждения разработчиков модулей к использованию сверхмощного подхода UIComponent, если это возможно, что означает либо динамический способ выполнения пользовательского интерфейса: включение (или некоторый эквивалент), либо динамический способ вызова CC. (Я не против кодировать UIComponent подход ОДИН РАЗ в приложении, если это то, что нужно, чтобы облегчить жизнь разработчикам модулей)
Любые предложения о том, где я должен искать, чтобы выяснить это? (Я опубликую ответ здесь, если найду его первым)