2015-07-29 2 views
0

Я пытаюсь создать DataTable столбец прагматично, используя primeface 5.2, wildfly, Mojarra 2.2.6Добавление р: колонка с filterBy программно и SortBy атрибуты

Я унаследовал от DataTable, а также создание своих собственных столбцов, я хочу, чтобы установить SortBy, filterBy атрибуты, используя выражения значений, используя приведенный ниже код

public void AddCoulumn(String colName, String dbFieldName, 
     boolean Searchable) { 
    ValueExpression valExpr = null; 
    Column column = new Column(); 
    valExpr = createValueExpression("#{obj." + dbFieldName + "}"); 
    column.setValueExpression("filterBy", valExpr); 
    column.setValueExpression("sortBy", valExpr); 
    column.setWidth("100px"); 
    column.setHeaderText(colName); 
    HtmlOutputText out = new HtmlOutputText(); 
    out.setValueExpression("value", valExpr); 
    out.setStyle("color:red"); 
    column.setField(dbFieldName); 
    this.getChildren().add(column); 

} 

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

Вызванный: java.lang.NullPointerException на org.primefaces.component.datatable.DataTable.findColumnInGroup (DataTable.java:905) [primefaces-5.2.jar: 5.2] на org.primefaces.component.datatable. DataTable.findColumn (DataTable.java:896) [primefaces-5.2.jar: 5.2] at org.primefaces.component.datatable.feature.SortFeature.decode (SortFeature.java:86) [primefaces-5.2.jar: 5.2] at org.primefaces.component.datatable.DataTableRenderer.decode (DataTableRenderer.java:62) [primefaces-5.2.jar: 5.2] at javax.faces.component.UIComponentBase.decode (UIComponentBase.java:831) [jboss- jsf-api_2.2_spec-2.2.6.jar: 2.2.6]

спасибо в объявлении vance

+0

спасибо за внимание я обновил мой вопрос ваш любезно поддержку высоко ценится – Best

+0

работает без filterBy и sortBy? – Kukeltje

ответ

2

Я исправил эту проблему после отладки PrimeFaces datatable. Я обнаружил, что если вы попытаетесь сортировать или фильтровать с использованием определенного столбца , то datatable вызывает функцию findcolumn, которая принимает строковый идентификатор клиента в качестве параметра: findcolumn(string client id). Внутри этой функции функция, называемая getcolumns(), извлекает столбцы таблицы ... Если идентификатор клиента находится в списке, он возвращает столбец, но в этом случае он никогда не находит столбец, потому что PrimeFaces/JSF изменяет идентификатор столбцов на обратной стороне, поскольку весь вид восстановлен. Таким образом, столбец не будет найдено больше

Чтобы решить эту проблему явно установить столбец ID

column.setId(colName); 

Он работает отлично теперь

+0

Большое спасибо за вашу помощь сейчас! – Best

Смежные вопросы