Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF доступ к компонентам страницы из составного компонента / 4 сообщений из 4, страница 1 из 1
21.02.2013, 17:25:21
    #38161167
Alex-ZZZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF доступ к компонентам страницы из составного компонента
Есть JSF страница с таблицей и составной компонент util:po_pagers

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        <h:form>

            <h:dataTable id="table1" value="#{tableData.modelTable}" var="table" rows="10">

            ...

            </h:dataTable>

  
            <!-- Мой составной компонент постраничного вывода таблицы tableId="table1" -->
            <util:po_pagers tableId="table1" rows="20"/>


        </h:form>
                



Вопрос в том, как получить UIComponent в бине составного компонента, который бы включал в себя все элементы страницы, а не только элементы составного компанента? Например надо получить UIData таблицы по tableId.
...
Рейтинг: 0 / 0
22.02.2013, 11:19:38
    #38161896
Alex-ZZZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF доступ к компонентам страницы из составного компонента
Нашел ответ.

Код: java
1.
2.
3.
        // получаем все компоненты формы на которую добавили наш компонент по formId и tableId
        FacesContext context = FacesContext.getCurrentInstance();
        data = (UIData) context.getViewRoot().findComponent(formId+":"+tableId);



Но возник второй вопрос.
Передаю моему составному компоненту ID формы, таблицы и число отображаемых строк.

Код: java
1.
2.
            <!-- Мой составной компонент постраничного вывода таблицы tableId="table1" -->
            <util:po_pagers formId="form1" tableId="table1" rows="20"/>



Определяю эти атрибуты в составном компоненте.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
        <!-- в интерфейсе задаем атрибуты составного компонента -->
        <composite:interface>
            <!-- атрибут formId, id формы на которую добавили наш компонент-->
            <composite:attribute name="formId" required="true" default="form1" />
            <!-- атрибут tableId, id нашей таблицы-->
            <composite:attribute name="tableId" required="true" default="table1" />
            <!-- атрибут rows кол-во строк на странице, обязательный required="true" и по умолчанию равен 20 -->
            <composite:attribute name="rows" required="true" default="20" />
        </composite:interface>



Эти атрибуты являются свойствами бина, с которыми я потом работаю, но как получить их значения в бине? Может кто подскажет.
...
Рейтинг: 0 / 0
22.02.2013, 12:10:33
    #38161996
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF доступ к компонентам страницы из составного компонента
Alex-ZZZНашел ответ.
Код: java
1.
2.
3.
        // получаем все компоненты формы на которую добавили наш компонент по formId и tableId
        FacesContext context = FacesContext.getCurrentInstance();
        data = (UIData) context.getViewRoot().findComponent(formId+":"+tableId);


Все это чревато. Появится в дереве еще 1 именованный контейнер, и таблицу не найдете.
Если уж надо выводить данные постранично, то чем не устроили таблица и пейджер из Tomahawk? Или таблицы richfaces?
...
Рейтинг: 0 / 0
22.02.2013, 12:52:56
    #38162093
Alex-ZZZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF доступ к компонентам страницы из составного компонента
ivanraВсе это чревато. Появится в дереве еще 1 именованный контейнер, и таблицу не найдете.


Не совсем понял, почему я не найду таблицу если буду передавать ID формы на которой она находится? Или вы имеете ввиду, что таблица будет не только в форме, но еще например в панели? Тогда остается вопрос как найти любой компонент зная его ID из любой точки программы, может подскажете?

ivanraЕсли уж надо выводить данные постранично, то чем не устроили таблица и пейджер из Tomahawk? Или таблицы richfaces?


Я прочитал книгу по JSF 2.0 и сейчас пробую написать тестовую программу, понадобилось реализовать постраничный вывод таблицы, хочу сделать это с помощью JSF.


Решил вопрос получение управляемым бином атрибутов составного компонента так. Добавил скрытые поля, получил в них атрибуты компонента.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
        <!-- в интерфейсе задаем атрибуты составного компанента -->
        <composite:interface>
            <!-- атрибут formId, id формы на которую добавили наш компонент-->
            <composite:attribute name="formId" required="true" default="form1" />
            <!-- атрибут tableId, id нашей таблицы-->
            <composite:attribute name="tableId" required="true" default="table1" />
            <!-- атрибут rows кол-во строк на странице, обязательный required="true" и по умолчанию равен 20 -->
            <composite:attribute name="rows" required="true" default="20" />
        </composite:interface>


        <!-- реализация составного компонента -->
        <composite:implementation>

            <!-- добавляем скрытые поля для того чтобы получить наши задаваемые атрибуты -->
            <h:inputHidden id="form_Id" value="#{cc.attrs.formId}" />
            <h:inputHidden id="table_Id" value="#{cc.attrs.tableId}" />
            <h:inputHidden id="rows_Id" value="#{cc.attrs.rows}" /> 
 
            ...



И получил их в бине.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    public void postAdd(ComponentSystemEvent event) throws AbortProcessingException {

        // получаем текущий компонент (мой составной компонент)
        UIComponent component = event.getComponent();

        // определяем один раз при первом запуске
        if (formId == null) {
            // из скрытых полей form_Id,table_Id, rows_Id получаем значения наших ID форм, таблицы и количества строк
            // специально ввел скрытые поля для того чтобы можно было получить эти значения
            UIInput componentForm = (UIInput) component.findComponent("form_Id");
            formId = componentForm.getValue().toString();

            UIInput componentTable = (UIInput) component.findComponent("table_Id");
            tableId = componentTable.getValue().toString();

            UIInput componentRows = (UIInput) component.findComponent("rows_Id");
            rows = new Integer(componentRows.getValue().toString());
        }


        // получаем все компоненты формы на которую добавили наш компонент по formId
        FacesContext context = FacesContext.getCurrentInstance();
        data = (UIData) context.getViewRoot().findComponent(formId + ":" + tableId);
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF доступ к компонентам страницы из составного компонента / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]