Como invocar a ação JSF em uma classe anônima? EL não pode acessá-lo
Quero ter um menu genérico no meu aplicativo JSF (MyFaces 1.2).
<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>
Então meu portal no escopo da sessão ficaria assim:
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;
}
}
Quando executo esse código, ele será exibido bem. Mas quando você tenta executar a ação clicando no link de comando "clickme" - a seguinte exceção ocorrerá:
Class org.apache.el.parser.AstValue can not access a member of class Portal$1 with modifiers "public"
Existe alguma maneira de exibir uma lista de classes anônimas, a partir da qual um método (neste exemploITemplate.action()
) pode ser executado?
Editar:
Funciona quando eu uso uma classe (interna). Como por exemplo:
class Bla implements IAction {
public void action() {
log.info("yes, i am working");
}
e no construtor Portal
public Portal() {
list.add( new Bla() );
}
Mas não é assim que eu quero ...