-Музыка

 -ТоррНАДО - торрент-трекер для блогов

 -Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в Cor_Win

 -Интересы

 -Сообщества

Читатель сообществ (Всего в списке: 1) Kharkov

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 08.07.2004
Записей:
Комментариев:
Написано: 2999


JSR-168 Portal + JSF: Работа с настройками портлетов

Вторник, 09 Октября 2007 г. 12:31 + в цитатник
все порталы, удовлетворяющие спецификации JSR-168, предоставляют стандартный механизм доступа и модификации настроек портлетов, посредством реализации интерфейса javax.portlet.PortletPreferences. в данной заметке рассмотрим способ работы с настройками портлета, реализованного с помощью технологии JavaServer Faces.

быстрое решение
основным интерфейсом связи с внешней средой для JSF технологии является класс javax.faces.context.FacesContext. параметры портлета, сведения о типе портального запроса, настройках режима и вида портлета храняться в классах-реализациях интерфейса портального запроса javax.portlet.PortletRequest. сведенья о пространстве имен портлета храняться в реализациях интерфейса портального ответа javax.portlet.PortletRespose. для связи всех этих классов и получения доступа к специфическим параметраметрам и установкам портлета реализуем утилитарный класс:

public final class PorletFacesUtils {
    private PortletFacesUtils() {
    }

    public static PortletRequest getPortletRequest(FacesContext context) throws Exception {
        Object request = context.getExternalContext().getRequest();
        if (request instanceof PortletRequest) {
            return (PortletRequest) request;
        } else {
            throws new Exception(“Portlet run outside the portal environment or portlet request class is not generic”);
        }
    }

    public static PortletRequest getPortletResponse(FacesContext context) throws Exception {
        Object response = context.getExternalContext().getResponse();
        if (request instanceof PortletResponse) {
            return (PortletResponse) response;
        } else {
            throws new Exception(“Portlet run outside the portal environment or portlet response class is not generic”);
        }
    }

    public static PortletPreferences getPortletRequest(FacesContext context) throws Exception {
        PortletRequest request = getPortletRequest(context);
        return request.getPortletPreferences();
    }
}

таким образом мы реализовали своеобразный мост между JSF-приложением и специфическими классами портальной среды. далее этот класс может быть использован для работы с параметрами и настройками портлета. также класс расширен для получения других классов, специфичных для портальной среды (например javax.portlet.PortletSession, javax.portlet.PortletContext и т.п.).
риски
некоторые фреймворки JSF компонентов (например ICEfaces) использую свои врапперы портальных запросов и ответов. эти врапперы могут не являться наследниками стандартных интерфейсов, а следовательно будут ошибочно обработаны утилитарным классом. в этом случае необходимо реализовать механизм адаптера портальной среды для конкретной реализации враппера. как это сделать, я расскажу ниже.

гибкое решение
реализация гибкого механизма доступа к компонентам портальной среды позволит существенно упростить переход между различными библиотеками JSF компонентов, реализациями порталов и спецификации JSF. за основу этого решения мы возьмем функциональность утилитарного класса, описанного выше.
вместо утилитарного класса опишем общий интерфейс адаптера портальной среды:

public interface PortletFacesAdapter extends Serializable {
    PortletRequest getPortletRequest(FacesContext context);

    PortletResponse getPortletResponse(FacesContext context);

    PortletPreferences getPortletPreferences(FacesContext context);
}

перенесем функциональность утилитарного класса в реализацию интерфейса адаптера:

public class GenericPortletFacesAdapter {
    public PortletRequest getPortletRequest(FacesContext context) throws Exception {
        Object request = context.getExternalContext().getRequest();
        if (request instanceof PortletRequest) {
            return (PortletRequest) request;
        } else {
            throws new Exception(“Portlet run outside the portal environment or portlet request class is not generic”);
        }
    }

    public PortletRequest getPortletResponse(FacesContext context) throws Exception {
        Object response = context.getExternalContext().getResponse();
        if (request instanceof PortletResponse) {
            return (PortletResponse) response;
        } else {
            throws new Exception(“Portlet run outside the portal environment or portlet response class is not generic”);
        }
    }

    public PortletPreferences getPortletRequest(FacesContext context) throws Exception {
        PortletRequest request = getPortletRequest(context);
        return request.getPortletPreferences();
    }
}

теперь нам необходимо реализовать JSF managed bean, который будет поддерживать механизм адаптеров:

public class AdaptableBean implements Serializable {
    private PortletAdapter adapter;

    public PortletAdapter getAdapter() {
        return adapter;
    }

    public void setPortletAdapter (PortletAdapter adapter) {
        this.adapter = adapter;
    }
}

фактически мы реализовали механизм полноценной работы JSF framework внутри портальной среды. осталось только проиллюстрировать его конфигурацию. итак реализуем простой класс JSF managed bean, который используется в портлете:

public class TestBean extends AdaptableBean {
}

и сконфигурируем портлет, для использования этим классом GenericPortletFacesAdapter адаптера:

<faces-config>
    <managed-bean>
        <managed-bean-name>portletAdapter</managed-bean-name>
        <managed-bean-class>GenericPortletFacesAdapter</managed-bean-class>
        <managed-bean-scope>application</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>testBean</managed-bean-name>
        <managed-bean-class>TestBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>adapter</property-name>
            <value>portletAdapter</value>
        </managed-property>
    </managed-bean>
</faces-config>

ссылки
Java Portlet API
Java ServerFaces API
Эта статья на английском языке
Рубрики:  Рабочее
Метки:  

Cor_Win   обратиться по имени Среда, 10 Октября 2007 г. 13:37 (ссылка)
Цареффна? знаю. и по-моему она меня даже когда-то читала. а что?
Ответить С цитатой В цитатник
Сущность_Апроксимированая   обратиться по имени Вторник, 17 Июня 2008 г. 13:28 (ссылка)
Чел, уважаю! Респект! Я афигел...наработе через гугл да на этот пост....неожидал...
Работал ли ты с Struts 2 portlet....

У мя тут такая трабла....намогу наладить общение через сесию обычных портлетов и стратсовских. Если знаешь, помоги плиз...
Ответить С цитатой В цитатник
Перейти к дневнику

Вторник, 17 Июня 2008 г. 14:06ссылка
спасибо. вобщем-то побудило меня описывать свои опыты и наработки как-раз то, что информацию по Liferay и вообще работе с JSR-168 порталами найти не легко. увы, с портлетами Struts2 я не работал. моя парафия была JSF.
кстати, этот блог больше для дыбра, подумал я и решил сделать отдельный технический. может быть что и пригодиться. это не реклама, просто информация.
Перейти к дневнику

Вторник, 17 Июня 2008 г. 16:13ссылка
Так я и думал - блогспот!!!!- умя тоже такая идея было возникла, но я по молодости своей удосужился запостить там только статью по диабло =))))...
Сущность_Апроксимированая   обратиться по имени Вторник, 17 Июня 2008 г. 13:30 (ссылка)
а точнее у мя трабла с javax.portlet.PortletPreferences. нет его там где он должен быть...а где он должен быть я не знаю...где его взять?
Ответить С цитатой В цитатник
Перейти к дневнику

Вторник, 17 Июня 2008 г. 14:09ссылка
PortletPrefereces лежит в PortletRequest. это аксиома и требование интерфейса. PortletRequest -- это общий интефейс любых портальных реквестов, которых бывает три вида ActionRequest, RenderRequest и StateRequest (насчет этого не уверен, по-моему он есть и называется именно так). поскольку Liferay Portal UI построен на основе Struts, то наверняка у них в исходниках есть пример получения и PortletPreferences, так что копать нужно туда.
Перейти к дневнику

Вторник, 17 Июня 2008 г. 16:12ссылка
Сенкс!....Я тут пока ломанулся в нет и добавил в свой стратс апликейшен ярник - portlet-api-1.0.jar...Так как я по примеру делаю...(портлетами я вооще никогда не занимался)а у меня такой таск - поднять стратс 2 апликейшен одновременно как апликейшен и портлет...вот и ищу разные способы обьеденить...юзаем JBoss portal 2.6...
Ответить С цитатой В цитатник
Комментировать К дневнику Страницы: [1] [Новые]
 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку