Chcę mieć ogólne menu w mojej aplikacji JSF (MyFaces 1.2).Jak wywołać akcję JSF na anonimowej klasie? EL nie może uzyskać do niego dostępu
<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>
Wtedy mój portal na sesji-Scope będzie wyglądać następująco:
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;
}
}
Kiedy uruchomić tego kodu spowoduje wyświetlenie w porządku. Ale podczas próby wykonania tej operacji poprzez kliknięcie „clickme” link polecenia - następujący wyjątek wystąpią:
Class org.apache.el.parser.AstValue can not access a member of class Portal$1 with modifiers "public"
Czy istnieje jakiś sposób, aby wyświetlić listę anonimowych klas, z których metoda (w tym przykładzie ITemplate.action()
) może zostać wykonany?
Edit:
To działa, gdy używam (wewnętrznej) klasę. Jak na przykład:
class Bla implements IAction {
public void action() {
log.info("yes, i am working");
}
i konstruktora Portal
public Portal() {
list.add(new Bla());
}
ale nie jest to sposób, w jaki chcę go ...
to zrozumiałe wyjaśnienie iw tym celu to rozwiązanie działa dobrze. dzięki ++ – justastefan
Nie ma za co. – BalusC