Я получил простую настройку (и большую проблему): страница JSP с пустым контейнером элемента сетки панели и привязкой к bean-компоненту.
<h:panelGrid binding="#{ bean.container }" id="container" />
При вызове геттера бина контейнер заполняется случайным количеством столбцов со ссылкой на команду внутри. Все идет нормально. Контейнер заполнен нужным количеством элементов, и с помощью ActionListener для ссылок я получаю все события кликов.
А вот и сложная часть: я хочу пометить столбец «выбранный» или «нажатый» с помощью другого класса стиля. При статической настройке я бы сделал это с помощью такого выражения:
<h:column styleClass="#{ bean.selectedColumn eq 'id' ? 'btnSelected' : 'btn' }">
<!-- command link and some blahblah -->
</h:column>
Компонент содержит простой геттер getSelectedColumn()
, который возвращает идентификатор. Прямо вперед, так что это работает идеально!
Но когда я пытаюсь сделать то же самое внутри компонента,
ELContext elContext = FacesContext.getCurrentInstance().getELContext();
String expression = "#{ bean.selectedColumn eq 'id' ? 'btnSelected' : 'btn' }";
new ExpressionFactoryImpl().createValueExpression(elContext, expression, String.class);
column.setValueExpression("styleClass", valueExpression);
выражение никогда не будет разрешено. Чтобы было понятно: обе ссылки на команды, столбцы и выражения значений генерируются внутри bean-компонента. Это причина?
Кто-нибудь может сказать мне, почему? Заранее спасибо!