У меня есть тег iframe на моей странице JSF. Этот iframe отображает страницу аутентификации SSO.
Кроме того, на странице JSF у меня есть кнопка, которая просто вызывает (с помощью ajax) компонент поддержки.
Сценарий A (которыйработает): Пользователь загружает страницу JSF, может нажать на кнопку и вызывается метод компонента поддержки, также результаты видны в ap: outputPanel. В то же время содержимое iframe отображается и показывает форму авторизации SSO. Этот сценарий доказывает, что кнопка, Java-бин и отображение ajax приводят к работе outputPanel.
Сценарий B (который не работает): Пользователь загружает страницу JSF, но сначала регистрирует журналв форму авторизации SSO (в iframe), успешно. Родительская страница JSF не должна быть затронута, поскольку не было никаких изменений, внесенных в родительскую страницу dom, ни в набор cookie-файлов или что-либо еще (все происходило только в iframe). Тем не менее, когда пользователь теперь нажимает кнопку JSF (что обычно работаетв сценарии 1) выполняется вызов ajax, но метод компонента не вызывается. Также ответ ajax не содержит div и его содержимое, которое обычно заполняет outputPanel.
Что я сделал до сих пор: я честно поцарапал Интернет для чего-нибудь полезного, а также в локальной среде. Я проверил, что:
- Нет ошибок в журнале сервера при сценарии bслучается
- Ответ ajax для вызова кнопки в сценарии B равен 200 и имеет ожидаемый xml-тег частичного ответа, хотя java-метод не был вызван и поэтому частичный ответ не содержит обновления msgPanel.
После 2 дней борьбы с разными попытками мой мозг «выполнил переполнение стека», так как я не знаю, что делать с отладкой для этой проблемы. Главное, что меня пугает, это то, что все, что происходит в iFrame, не должно влиять на удобство использования кнопки, которая находится на родительской странице jsf.
Для справки вот простая страница JSF:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:fn="http://java.sun.com/jsp/jstl/functions">
<iframe id="ssoIframe"
src="https://sso?service=https://aLocalCallbackPage"
width="500px" height="280px">
</iframe>
<h:form id="placeholderForm">
<p:commandButton id="ajaxBtn" value="Test Ajax call"
action="#{testSimpleBean.callAjax()}" global="true" />
</h:form>
<p:outputPanel autoUpdate="true">
<p:growl showDetail="true" sticky="true" globalOnly="true" />
</p:outputPanel>
Пожалуйста, помогите с любыми идеями отладки.