Je veux avoir un menu générique dans mon application JSF (MyFaces 1.2).Comment appeler l'action JSF sur une classe anonyme? EL ne peut pas y accéder
<h:form>
<h:dataTable id="dt1" value="#{portal.actionList}" var="item">
<f:facet name="header">
<h:outputText value="Menu" />
</f:facet>
<h:column>
<h:commandLink action="#{item.action}">
<h:outputText value="clickme"/>
</h:commandLink>
</h:column>
</h:dataTable>
</h:form>
Alors mon portail sur session portée ressemblerait à ceci:
class Portal {
private ArrayList<IAction> list = new ArrayList<IAction>();
public Portal() {
list.add(new IAction() {
public action() {
log.info("called action here");
}
});
}
public ArrayList<IAction> getActionList() {
return list;
}
}
Quand je lance ce code, il affiche bien. Mais quand vous essayez d'exécuter l'action en cliquant sur le lien de commande « ClickMe » - l'exception suivante se produira:
Class org.apache.el.parser.AstValue can not access a member of class Portal$1 with modifiers "public"
Est-il possible d'afficher une liste des classes anonymes, dont une méthode (dans cet exemple ITemplate.action()
) peut être exécuté?
Edit:
Il fonctionne quand j'utilise une classe (intérieure). Comme par exemple:
class Bla implements IAction {
public void action() {
log.info("yes, i am working");
}
et dans le constructeur Portal
public Portal() {
list.add(new Bla());
}
Mais ce n'est pas la façon dont je le veux ...
c'est une explication compréhensible et à cette fin, cette solution fonctionne très bien. merci ++ – justastefan
De rien. – BalusC