Я использую Primefaces DataTable, он использует значение из bean-компонента, который предоставляет список. и мы отображаем строку для каждого элемента из списка.
Также у меня есть еще один список, который используется для отображения значений в каждой строке для каждого из его столбцов.
Пример ниже работает очень хорошо.
ИСПОЛЬЗОВАНИЕ ЗНАЧЕНИЙ ИЗ BEAN
<p:dataTable var = "item" value = "#{bean.items}">
<p:columns var = "value" value = "#{bean.values}">
<p:outputLabel value = "#{value}"/> <!--[WORKS FINE !!!]-->
</p:columns>
</p:dataTable>
Если вместо использования значений из компонента я пытаюсь использовать значения из самого элемента, он ничего не отображает!
ИСПОЛЬЗОВАНИЕ ЗНАЧЕНИЙ ИЗ САМОГО ЭЛЕМЕНТА
<p:dataTable var = "item" value = "#{bean.items}">
<p:columns var = "value" value = "#{item.values}">
<p:outputLabel value = "#{value}"/> <!--[DOES NOT DISPLAY ANYTHING !!!]-->
</p:columns>
</p:dataTable>
Компонент выглядит следующим образом и отображает строки в таблице данных при использовании значений оттуда.
@Named("bean")
@ViewScoped
public class Bean implements Serializable
{
private static final long serialVersionUID = 1L;
private List<Item> _items = new LinkedList<>();
private List<String> _values = new LinkedList<>();
public List<Item> getItems() {return _items;}
public void setItems(List<Item> items) {_items = items;}
public List<String> getValues() {return _values;}
public void setValues(List<String> values) {_values = values;}
//[BUILD]
@PostConstruct public void init()
{
_items.add(new Item());
_items.add(new Item());
_items.add(new Item());
}
}
Объект Item выглядит следующим образом и не отображает строки при использовании оттуда значений.
public class Item
{
private List<String> _values = new LinkedList<>();
public List<String> getValues() {return _values;}
public void setValues(List<String> values) {_values= values;}
//[BUILD]
public Item()
{
_values.add("value0");
_values.add("value1");
_values.add("value2");
}
}
Почему таблица данных Primeface не отображает ни одной строки в случае, если я использую список значений из внешнего объекта, как показано ниже???
РАБОТАЕТ ОТЛИЧНО !
<p:dataTable var = "item" value = "#{bean.items}">
<p:columns var = "value" value = "#{bean.values}"><!--[USING BEAN LIST<STRING> -->
<p:outputLabel value = "#{value}"/>
НЕ РАБОТАЕТ!
<p:dataTable var = "item" value = "#{bean.items}">
<p:columns var = "value" value = "#{item.values}"><!--[USING ITEM LIST<STRING> -->
<p:outputLabel value = "#{value}"/>
Как видно из витрины https://www.primefaces.org/showcase/ui/data/treetable/columns.xhtml столбцы (и, следовательно, количество столбцов) не должны зависеть от текущего элемента.
Для которого есть дубликат: stackoverflow.com/questions/25658034/…
@Alexcat да, похоже, они так и используют. Но это просто не имеет смысла. Объект, который вы передаете в таблицу данных, скорее всего, будет списком объектов, и для каждого объекта вы хотите создать столбцы данных строки. Что имеет смысл, так это передать переменную с данными в столбцы var.
@Alexcat также нигде в документации не сказано, что мы не можем сделать это таким образом. Так что ничего официального здесь нет. У меня до сих пор нет ответа на мой вопрос :(
@fra Я согласен с вами, что в документации не указано, что разрешено, а что запрещено. Тем не менее, я согласен с логикой p:columns. Действительно, список сущностей, который вы передаете Таблица данных, должен влиять только на количество строк, а не на количество столбцов.
Возможный дубликат Статические и динамические столбцы Primefaces в таблице данных