Смешивание jsp и jsf
Я немного уточню. Jsf является своего рода чрезвычайно болезненным для работы с точки зрения дизайнера, несколько в диапазоне, пытаясь нарисовать картину, имея руки связаны за спиной, но это хорошо для жевания форм и перечисления большого количества данных. Поэтому сайты мы делаем в моей компании несколько страниц JSF администратора и пользователя страницы JSP. Проблема возникает, когда страницы пользователей имеют некоторые сложные формы и прочее, и jsf начинает пинать.
Вот вопрос: я на чистой странице jsp. Я нужно получить доступ к некоторой странице jsf, которая использует Session bean. Как я могу инициализировать этот боб? Если бы я был на странице jsf, я мог бы иметь некоторую командную ссылку, которая подготовила бы данные. Единственное, что я могу придумать, это иметь фиктивную страницу jsf, которая будет выполнять работу и перенаправлять меня на нужную страницу jsf, но это довольно уродливо, и я не хочу, чтобы в итоге получилось 50 фиктивных страниц. Я бы предпочел найти какой-то механизм для повторной инициализации bean, который уже находится в сеансе с некоторыми нужными параметрами.
Правка: еще несколько деталей. В этой конкретной ситуации у меня есть тесты, которые либо заполнены, либо отфильтрованы. Это тот же тест с той же логикой и все такое, за исключением того, что если тест фильтруется, он должен исключить некоторые вопросы в зависимости от ответов. При нажатии на ссылку он должен запустить запрошенный тест в одном из двух режимов. Ссылки являются частями главного меню-дерева и видны на многих родственных страницах jsp. Моя задача-есть 4 ссылки: полный теста, теста процеживают, testB полностью, testB фильтруется, что все они ведут на той же странице JSF и TestFormBean должен быть повторно инициализирован соответствующим образом.
Edit: я немного исследовал facelets, и хотя это не поможет мне сейчас, я определенно буду иметь это в виду для следующего проекта.
5 ответов:
Чтобы решить эту проблему, я бы, вероятно, создал фрагмент JSF, который включает только вашу форму, а затем использовал тег, чтобы включить его в мою страницу JSF.
Это решение, вероятно, немного хрупкое в зависимости от вашего окружения.
EDIT: смотрите ответ Криса Холла, 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 из запроса в конструкторе.
Comments