-Метки

google how to life story Тоска ЧЕМПИОНАТ афоризмы бог боль бывает бюргеры вкусности вязание германия гормоны дети диета дружба друзья душа женщина жизненное жизнь жизнь студенческая забыть нельзя запеканка заряд бодрости заячья нора зож зоопарк изотерика интересное история история похудения квантовая физика кд косметика кофе коэльо красота лирика луиза хей любимые фильмы любовь метки мечта мир митенки мозг мудрости мужчина мужчины музыка мысли не-для-похудения необычное непознанное неформал нуп он и она она пинетки питер позитифф попа поржать похудение приколы природа притча прощение работа рагу овощное радость разговор рацион реальность рецепт рецепты русская мантра рыба сила притяжения сознание спицами спорт стихи счастье сыр творог универ учеба философия фото футбол хорошее настроение человек честность чудеса шпинат юмор

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

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

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

 

 -Статистика

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


Динамичная DataTable в JSF (Richfaces)

Понедельник, 10 Января 2011 г. 15:10 + в цитатник

Пишу в JSF программку. Надо чтобы в dataTable столбцз выводились динамически, поскольку заранее мы не знаем, сколько будет столбцов. Нашла решение, только не понимаю, почему нельзя взять метод setValueExpression()?

 

package mypackage;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.el.ValueExpression;
import javax.faces.component.HtmlColumn;
import javax.faces.component.HtmlOutputText;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.context.FacesContext;

public class MyBean {

// Init
------------------------------------------

private static List<List<String>> dynamicList; // Simulate fake DB.
private static String[] dynamicHeaders; // Optional.
private HtmlPanelGroup dynamicDataTableGroup; // Placeholder.

// Actions
------------------------------------------

private void loadDynamicList() {

// Set headers (optional).
dynamicHeaders = new String[] {"ID", "Name", "Value"};

// Set rows. This is a stub example, just do your dynamic thing.
dynamicList = new ArrayList<List<String>>();
dynamicList.add(Arrays.asList(new String[] { "ID1", "Name1", "Value1" }));
dynamicList.add(Arrays.asList(new String[] { "ID2", "Name2", "Value2" }));
dynamicList.add(Arrays.asList(new String[] { "ID3", "Name3", "Value3" }));
dynamicList.add(Arrays.asList(new String[] { "ID4", "Name4", "Value4" }));
dynamicList.add(Arrays.asList(new String[] { "ID5", "Name5", "Value5" }));
}

private void populateDynamicDataTable() {

// Create <h:dataTable value="#{myBean.dynamicList}" var="dynamicItem">.
HtmlDataTable dynamicDataTable = new HtmlDataTable();
dynamicDataTable.setValueExpression("value",
createValueExpression("#{myBean.dynamicList}", List.class));
dynamicDataTable.setVar("dynamicItem");

// Iterate over columns.
for (int i = 0; i < dynamicList.get(0).size(); i++) {

// Create <h:column>.
HtmlColumn column = new HtmlColumn();
dynamicDataTable.getChildren().add(column);

// Create <h:outputText value="dynamicHeaders[i]"> for <f:facet name="header"> of column.
HtmlOutputText header = new HtmlOutputText();
header.setValue(dynamicHeaders[i]);
column.setHeader(header);

// Create <h:outputText value="#{dynamicItem[" + i + "]}"> for the body of column.
HtmlOutputText output = new HtmlOutputText();
output.setValueExpression("value",
createValueExpression("#{dynamicItem[" + i + "]}", String.class));
column.getChildren().add(output);
}

// Add the datatable to <h:panelGroup binding="#{myBean.dynamicDataTableGroup}">.
dynamicDataTableGroup = new HtmlPanelGroup();
dynamicDataTableGroup.getChildren().add(dynamicDataTable);
}

// Getters
------------------------------------------

public HtmlPanelGroup getDynamicDataTableGroup() {
// This will be called once in the first RESTORE VIEW phase.
if (dynamicDataTableGroup == null) {
loadDynamicList(); // Preload dynamic list.
populateDynamicDataTable(); // Populate editable datatable.
}

return dynamicDataTableGroup;
}

public List<List<String>> getDynamicList() {
return dynamicList;
}

// Setters ------------------------------------------

public void setDynamicDataTableGroup(HtmlPanelGroup dynamicDataTableGroup) {
this.dynamicDataTableGroup = dynamicDataTableGroup;
}

}

 Попробовала сама дефинировать (совственно переписать) функцию:

private ValueExpression createValueExpression(Object instance, Class<?> expectedType) {
        return FacesContext.getCurrentInstance().getApplication().getExpressionFactory().createValueExpression(instance, expectedType);
    }

В XHTML коде (или в .jsf) выглядит следующим образом - таблица вставлена в Панельную группу:

<h:panelGroup binding="#{myBean.dynamicDataTableGroup}">
    <h:dataTable value="#{myBean.dynamicList}" var="dynamicItem">
        <h:column>
        <f:facet name="header">
            <h:outputText value="dynamicHeaders[i]"/>
        </f:facet>
        <h:outputText value="#{dynamicItem[" + i + "]}"/>
        </h:column>
    </h:dataTable>
</h:panelGroup>

Блин чет все равно не работает...

 

Рубрики:  Programming & Design
Программирование, Java, CSS, html, tags, фотошоп
Метки:  

 

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

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

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

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