Quiero tener un menú genérico en mi aplicación JSF (MyFaces 1.2).¿Cómo invocar la acción JSF en una clase anónima? EL no puede acceder a él
<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>
Entonces mi portal en sesión de alcance se vería así:
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;
}
}
Cuando ejecuto el código se mostrará bien. Pero cuando intenta ejecutar la acción haciendo clic en el enlace de comando "ClickMe" - se producirá la siguiente excepción:
Class org.apache.el.parser.AstValue can not access a member of class Portal$1 with modifiers "public"
¿Hay alguna manera de mostrar una lista de las clases anónimas, de las que un método (en este ejemplo ITemplate.action()
) ¿se puede ejecutar?
Editar:
Funciona cuando se utiliza una clase (interior). Como por ejemplo:
class Bla implements IAction {
public void action() {
log.info("yes, i am working");
}
y en el constructor Portal
public Portal() {
list.add(new Bla());
}
Pero esta no es la forma que yo quiero ...
eso es una explicación comprensiva y para este propósito, esta solución funciona bien. gracias ++ – justastefan
De nada. – BalusC