Передача параметров ui:include не работает, когда включена удаленная страница

У меня есть базовый пользовательский интерфейс (index.html), который разделен на заголовок, нижний колонтитул и контент. Страница содержимого находится либо на том же (local.xhtml) сервере, что и index.html, либо на другом (remote.xhtml) сервере. Включение страниц и их динамическая перезагрузка с помощью ajax работает довольно хорошо. Но передача параметров работает только на странице локального контента. Параметр извлекается из Bean-компонента с именем Login, который также находится на том же сервере, что и index.html.

index.xhtml (отрывок):

<h:panelGroup id="content" layout="block">
    <ui:include src="#{contentLoader.page}" >
        <ui:param name="userName" value="#{login.userName}" />
    </ui:include>
</h:panelGroup>
<h:form>
    <f:ajax render=":content">
        <ul>
            <li><h:commandLink value="include1"
                        action="#{contentLoader.LocalPage}" /></li>
            <li><h:commandLink value="include2"
                        action="#{contentLoader.remotePage}" /></li>
        </ul>
    </f:ajax>
</h:form>

локальный.xhtml

<h:body>
 <ui:composition>
    <h:form id="form">

        <h:outputText value= "Local Page. Parameter is: #{userName}"/>

    </h:form>
 </ui:composition>
</h:body>

удаленный.xhtml

   <h:body>
      <ui:composition>
         <h:form id="form">

           <h:outputText value= "Remote Page. Parameter is: #{userName}"/>

        </h:form>
       </ui:composition>
    </h:body>

local.xhtml выводит: "Локальная страница. Параметр: MyUser"

Только remote.xhtml: "Удаленная страница. Параметр: "

Я использую Glassfish4 в качестве веб-сервера и JSF2.


person Niko    schedule 03.02.2018    source источник
comment
Вы на 100% уверены, что «remote.xhtml» включен с удаленного сервера. Я очень сильно сомневаюсь, что это так. stackoverflow .com/questions/11965157/   -  person Kukeltje    schedule 03.02.2018
comment
Ну, они находятся на двух разных экземплярах Glassfish. Один находится на локальном хосте: 8680, другой — на локальном хосте: 8880.   -  person Niko    schedule 03.02.2018
comment
То же самое (другой сервер). Если у вас нет специального преобразователя ресурсов, это не сработает, но тогда это уже не удаленный сервер.   -  person Kukeltje    schedule 03.02.2018
comment
что вы подразумеваете под настраиваемым преобразователем ресурсов? И почему больше не на удаленном сервере? Что я хочу сделать, так это базовое веб-приложение микросервиса, в котором каждая MS имеет свой собственный пользовательский интерфейс. Внешний интерфейс MS включает в себя пользовательский интерфейс других MS.   -  person Niko    schedule 03.02.2018
comment
Ааа... У меня уже дежа-пока. Просто перечитайте свой предыдущий вопрос. Пользовательский преобразователь ресурсов может загрузить секунду для ui:include из любого места, но для ui:include это выглядит как локальное. Простой src для ui:include не может быть ничем за пределами текущего веб-приложения без ResourceResolver. Таким образом, ваше предположение в вопросе «неверно». Он не приходит с удаленного сервера. См. stackoverflow.com/questions/11965157/   -  person Kukeltje    schedule 04.02.2018
comment
См. предложение по вашему другому вопросу ... пользовательский преобразователь ресурсов ... вы вообще читали этот комментарий? Люди ценят, что вы отвечаете, если они пытаются вам помочь.   -  person Kukeltje    schedule 04.02.2018
comment
Я читаю это. Но это лицевая композиция. Я думал, что с ui:include все по-другому.   -  person Niko    schedule 05.02.2018
comment
Тогда, пожалуйста, в следующий раз выскажите, что вы «думаете». Ресурсы разрешения используются для обоих (И не только). Прочтите еще раз, BalusC улучшил его.   -  person Kukeltje    schedule 05.02.2018


Ответы (1)


Спасибо. Подсказки в комментариях решили мою проблему. На данный момент это отлично работает для меня:

<iframe> решал мою проблему. Передача параметров в URL и JSF работает блестяще.

Просто «включив» удаленную страницу с помощью <iframe src="#{myBean.Url}"></iframe> и прочитав параметр с помощью функции JSF "#{param['param1']}"

{myBean.Url} возвращает строку в следующем формате: localhost:8680/MyServiceservice/faces/myPage.html?param1=value1, где value1 является параметром, который я хочу передать.

person Niko    schedule 08.02.2018