2010-03-16 5 views
2

Nous avons un système basé sur les coutures/richfaces. Il y a cette page Web où les tableaux sont rendus à partir du contexte dynamique (à partir de plusieurs sources de données différentes, et chacun d'eux utilise une mise en page différente pour représenter essentiellement le même concept de monde réel). Par conséquent, cette table est liée à un bean et ses colonnes/mise en page sont générées à partir de ce bean.Comment créer un lien de commande par programme

Maintenant, je dois ajouter un lien de commande sur une colonne spécifique, ce qui équivaut à

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

dans une page JSF.

Le tableau est binded à un bean géré avec

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? 

Ma question est, comment dois-je faire ce programme?

Merci!

+0

@John @BalusC ou @Bozho vous montrer comment. Vous devez lier votre composant JSF dans votre bean géré afin d'obtenir votre objectif. –

+0

@ Arthur Je l'ai fait tout ce qui est basé sur le tutoriel de BalusC. C'est juste que je ne pouvais pas trouver un moyen correct de lier les objets commandlink et propertyActionListener (sur les objets HtmlColumn), ils ne sont pas dans l'API richfaces/jsf (ou suis-je juste les manque). – John

+0

Soyez cool. @Bozho est en ligne. Il va vous montrer comment –

Répondre

6
HtmlAjaxCommandLink commandLink = new HtmlAjaxCommandLink(); 
commandLink.addActionListener(new SetPropertyActionListener(target, value)); 
column.getChildren().add(commandLink); 

target et value sont ValueExpression « s. Ceux-ci peuvent être créés avec:

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

Et le nécessaire ELContext peut être obained via FacesContext.getCurrentContext().getELContext()

Questions connexes