flex и jsf обращаются к одному и тому же экземпляру bean-компонента - PullRequest
1 голос
/ 25 января 2010

Я интегрирую гибкое приложение в приложение jsf-icefaces (на сайте jspx с тегом ice: outputmedia-tag) и хочу получить удаленный доступ к тому же экземпляру bean-компонента из flex, который вводит jsf.

я уже связываюсь с блазидами в java-бобе. этот bean-компонент - как и все другие bean-компоненты - получает другие bean-компоненты путем внедрения jsf, но когда я обращаюсь к bean-компоненту удаленно из flex, он не содержит введенные bean-компоненты (например, localizer и accesmanager, обе области действия), и я не могу подключиться Сессия jsf (FacesContext.getCurrentInstance () имеет значение null). это потому, что flex создает новый экземпляр компонента, и это не тот текущий экземпляр, который, как мне кажется, внедряет jsf.

я могу подключиться из flex к базе данных, создав новый менеджер сущностей в Java-бине, но это не то, что я хочу, потому что это снова другой менеджер сущностей ... Я хочу сохранить и получить данные через bean-компонент accessmanager.

я знаю exadel fiji и flamingo, но я не мог работать с fiji, потому что мое jsf-приложение включает компоненты icefaces, и тогда оно не работает с richfaces, которые нужны fiji. и фламинго работают только со швом и пружиной. это правильно?

Я также читал об интеграции Spring-Flex, но приложение JSF не было создано с Spring, и я не хочу интегрировать Spring в такое большое приложение JSF. вчера я читал об интерфейсе FlexFactory. этот интерфейс я должен реализовать на своем собственном заводе и установить его в service-config.xml блэйзедов как фабрика прочитайте это . я все еще реализую свою собственную фабрику, но я получаю бины области приложения только через контекст сервлета, который я получаю через FlexContext.getServletContext (). getAttribute ("Bean"); а не сессионные бины в области видимости ...

я надеюсь, что есть шанс соединить throw flex и jsf ... спасибо!

1 Ответ

1 голос
/ 25 января 2010

FacesContext.getCurrentInstance () имеет значение null

Это произойдет, только если текущий запрос не был передан через FacesServlet. Другими словами, URL-адрес запроса не соответствует url-pattern из FacesServlet. Именно он отвечает за создание экземпляра потока FacesContext.

Но вам на самом деле не нужно FacesContext здесь. Поскольку JSF работает только в верхней части API сервлета, вы также можете перейти на низкий уровень и использовать его для захвата управляемого бина области сеанса. JSF сохраняет управляемые bean-объекты сессионной области как атрибуты HttpSession с именем управляемого bean-компонента в качестве ключа.

Таким образом, если, например, у вас есть управляемый компонент в рамках сеанса с именем управляемого компонента myBean и у вас есть HttpServletRequest в ваших руках, то вы также можете получить к нему доступ следующим образом:

MyBean myBean = (MyBean) request.getSession().getAttribute("myBean");
...