Вопрос

Я несколько уточню.С точки зрения дизайнера, с Jsf работать крайне сложно, что-то вроде попытки нарисовать картинку со связанными за спиной руками, но он хорош для разжевывания форм и перечисления большого количества данных.Итак, сайты, которые мы создаем в моей компании, - это страницы администратора jsf и страницы пользователя jsp.Проблема возникает, когда пользовательские страницы содержат какие-то сложные формы и прочее, и jsf начинает запускаться.

Вот в чем вопрос:Я нахожусь на чистой странице jsp.Мне нужно получить доступ к некоторой странице jsf, которая использует сессионный компонент.Как я могу инициализировать этот компонент?Если бы я был на странице jsf, у меня могла бы быть какая-нибудь командная ссылка, которая подготовила бы данные.Единственное, что я могу придумать, это создать фиктивную страницу jsf, которая выполнит всю работу и перенаправит меня на нужную страницу jsf, но это как-то некрасиво, и я не хочу, чтобы в итоге получилось 50 фиктивных страниц.Я бы предпочел найти какой-нибудь механизм для повторной инициализации компонента, который уже находится в сеансе с некоторыми требуемыми параметрами.

Редактировать:еще несколько деталей.В этой конкретной ситуации у меня есть тесты, которые либо заполнены, либо отфильтрованы.Это тот же тест с той же логикой и всем остальным, за исключением того, что если тест отфильтрован, он должен исключить некоторые вопросы в зависимости от ответов.После перехода по ссылке он должен запустить запрошенный тест в одном из двух режимов.Ссылки являются частями дерева главного меню и видны на многих родственных страницах jsp.Моя задача состоит в том, чтобы иметь 4 ссылки:testA full, testA filtered, TestB full, TestB filtered, что все ведут на одну и ту же страницу jsf и TestFormBean следует соответствующим образом повторно инициализировать.

Редактировать:Я немного изучил facelets, и хотя сейчас это мне не поможет, я определенно буду иметь это в виду в следующем проекте.

Это было полезно?

Решение

Чтобы решить эту проблему, я бы, вероятно, создал фрагмент JSF, который включает только вашу форму, а затем использовал <c:import> отметьте, чтобы включить его на мою страницу JSF.

Однако это решение, вероятно, немного хрупкое, в зависимости от вашей среды.

Редактировать:Смотрите ответ Криса Холла, FacesContext недоступен за пределами FacesServlet.

Другие советы

рассматривали ли вы возможность использования facelets?Это позволяет вам полностью избавиться от различий JSF / JSP (это альтернативный и улучшенный контроллер просмотра).

Он также поддерживает отличную семантику во время разработки с тегом jsfc...

<input type="text" jsfc="#{SomeBean.property}" class="foo" />

переводится внутренне в правильный формат JSF, чтобы вы могли работать с существующими инструментами.

Вы можете получить управляемый компонент внутри библиотеки тегов, используя что-то вроде этого:

FacesContext context = FacesContext.getCurrentInstance();
Object myBean = context.getELContext().getELResolver().getValue(context.getELContext(), null, "myBeanName");

Однако вам нужно будет использовать библиотеку тегов с одной из ваших страниц JSF.FacesContext.getCurrentInstance() возвращает значение null, когда оно вызывается вне FacesServlet.

На самом деле, я решил эту проблему, удалив bean из сеанса, поэтому он должен быть сгенерирован снова при вызове страницы jsf.Затем я выбираю параметры get из запроса в конструкторе.

Создайте пользовательский обработчик тегов JSP.Затем вы можете извлечь компонент из области сеанса, а затем инициализировать его "на лету".Видишь это Учебник для получения более подробной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top