Как создать командную ссылку программно - PullRequest
2 голосов
/ 17 марта 2010

У нас есть система, построенная на швах / richfaces. Есть эта веб-страница, на которой таблицы визуализируются из динамического контекста (из нескольких разных источников данных, и каждый из них использует разный макет для представления, по сути, одной и той же концепции реального мира). В результате эта таблица привязывается к bean-компоненту, и ее столбцы / компоновка генерируются из этого bean-компонента.

Теперь мне нужно добавить командную ссылку на конкретный столбец, эквивалентный

<a4j:commandLink value="#{actBean.Ids}" action="#{actBean.genDetails}">
    <f:setPropertyActionListener target="#{actBean.Ref}" value="#{cont}"/>
</a4j:commandLink>

на странице JSF.

Таблица привязана к управляемому компоненту с

HtmlDataTable dataTable = new HtmlDataTable();
HtmlColumn column = new Column();
//some code to setup column name, value etcs
dataTable.getChildren().add(column);
//What do I do here to bind a commandlink with a property action 
//listener to column?

У меня вопрос, как мне сделать это программно?

Спасибо!

1 Ответ

6 голосов
/ 17 марта 2010
HtmlAjaxCommandLink commandLink = new HtmlAjaxCommandLink();
commandLink.addActionListener(new SetPropertyActionListener(target, value));
column.getChildren().add(commandLink);

, где target и value - ValueExpression. Они могут быть созданы с помощью:

ExpressionFactory.getInstance().createValueExpression(ctx, expression, expectedType)

И требуемый ELContext может быть получен через FacesContext.getCurrentContext().getELContext()

...