我想在我的 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>
然后我的会话范围门户将如下所示:
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;
}
}
当我运行此代码时,它会显示正常。但是当您尝试通过单击“clickme”命令链接来执行该操作时 - 将发生以下异常:
Class org.apache.el.parser.AstValue can not access a member of class Portal$1 with modifiers "public"
有没有办法显示匿名类的列表,从中ITemplate.action()
可以执行一个方法(在这个例子中)?
编辑:
当我使用(内部)类时它可以工作。例如:
class Bla implements IAction {
public void action() {
log.info("yes, i am working");
}
在 Portal 构造函数中
public Portal() {
list.add( new Bla() );
}
但这不是我想要的方式...