Как реализовать JSF в Backbase Portal 5.2.1.2?

В настоящее время я пытаюсь добавить базовую поддержку JSF (2.0) в Backbase Portal 5.2.1.2 для использования в моих пользовательских виджетах.

Кажется, это работает, когда я получаю доступ к своему виджету статическим способом (например, ".../portal/static/portal_name/widgets/widget_name/index.xhtml"), но когда я вижу свой виджет в контексте портала (.../portal/portals/portal_name/pages/index) мои теги JSF отображаются в исходном HTML-коде вместо проанализированного вывода. То же самое происходит с переменными EL, такими как #{msg.title}.

Если я использую ту же настройку JSF в "обычном" проекте веб-приложения, она тоже работает нормально, поэтому, на мой взгляд, должно быть что-то специфичное для Backbase, которое вызывает эту проблему.

Я хотел бы знать, что является причиной того, что это может произойти, если это может быть решено или обойдено, или если кому-то удалось внедрить JSF в этой конкретной версии Backbase. Я знаю, что реализация JSF работала в Backbase 5.1, но для меня это не вариант вернуться к этой версии.

Edit - добавлен index.xhtml виджета по запросу (мой фактический index.xhtml немного больше, но это тоже не получается):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xml:lang="en">
<h:head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title>Help ribbon widget</title>
    <link rel="stylesheet" type="text/css" href="css/style.css" />
</h:head>
<h:body>
    <span class="left title">#{msg.help_title}</span>
    <h:outputText value="TEST"/>
</h:body>
</html>

Кроме того, я использую Border_Layout для моего шаблона контейнера, если это поможет.

Когда я перехожу на вкладку сети инспектора Google Chrome и просматриваю запрос файла index.xhtml виджета, я вижу правильный вывод, но по какой-то причине это не то же самое, что показано в комбинированном html.

1 ответ

Решение

Проблема этого подхода заключается в том, что определения виджетов в настоящее время не содержат динамического содержимого.

Я предполагаю, что в вашем сценарии контейнер *Border_Layout* является серверным рендерингом (SSR) виджета. Когда это происходит, если URL src вашего виджета является относительным, портал просто прочитает файл с диска, а сервлет Face никогда не будет вызван. Это нормально, определение должно быть статичным. Но есть два немедленных решения:

Во-первых, вы можете переключиться на рендеринг на стороне клиента (CSR). Это приведет к тому, что клиент сделает http-запрос для определения виджета, и к нему будет получен доступ через сервлет Face. Самый простой способ добиться этого - использовать пользовательский шаблон страницы, который не содержит <b:include> тег. Это решение означает, что оно не будет работать с отключенным JS.

Однако, если вы хотите продолжать использовать SSR, вы можете использовать абсолютный URL для свойства src вашего виджета. Это означает, что серверу нужно сделать http-запрос для виджета, тем самым пропустив его через сервлет Face. Здесь есть еще одна проблема; Так как сервер портала ожидает, что определения виджетов будут статичными, он будет агрегировать его, поэтому вам придется отключить кэширование виджетов.

Я бы не советовал оба эти решения, хотя в долгосрочной перспективе. Я бы порекомендовал вам запустить приложение JSF независимо в отдельном контексте, а затем найти способ включить его в виджет. Вы можете попробовать что-то настроить с помощью Backbase Mashup Services, но я бы порекомендовал простой подход iframe. Если вам потребуется, я могу предоставить вам более продвинутый виджет Backbase iframe для создания бесшовных iframe (без полос прокрутки и т. Д.).

Если вам нужна дополнительная поддержка, я рекомендую вам зарегистрироваться на https://my.backbase.com/. Новый сайт поддержки Backbase, где вы должны получить более специализированную помощь, документы и примеры кода.

Другие вопросы по тегам