我想在我的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>
然后,我在session-scope上的门户将如下所示:
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() );
}
但这不是我想要的方式…
这是因为无法从包含匿名类的包外部访问匿名类。
这是一个幕后发生的演示:
public static void main(String[] args) throws Exception {
Portal portal = new Portal();
Object list = portal.getClass().getDeclaredMethod("getActionList", null).invoke(portal, null);
Object action = list.getClass().getDeclaredMethod("get", new Class[] { int.class }).invoke(list, 0);
action.getClass().getDeclaredMethod("action", null).invoke(action, null);
}
尝试在与Portal
类相同的程序包中执行此操作,然后在该程序包之外的另一个类中再次执行。在另一个包中,最后一行将引发完全相同的异常。因为EL基于反射,所以这就是EL努力解决的问题。
除了创建public
(inner)之外,我没有其他更好的解决方法class
。反射(以及EL)也可以从其他包中访问它们。
public class Portal {
private List<IAction> list = new ArrayList<IAction>();
public Portal() {
list.add(new IActionImpl());
}
public class IActionImpl implements IAction {
public void action() {
System.out.println("called action here");
}
}
public List<IAction> getActionList() {
return list;
}
}
我以为我对自己正在做的事情有很好的把握,但每当我觉得我对某事有很好的把握时,我被证明是错的:) 当我不在匿名类中时,我可以简单地执行 有人能解释为什么我可以调用方法,但不能在intent参数中使用吗?
如何访问main方法中的匿名内部类对象。它给出了编译时错误,称“无法对非静态方法进行静态引用”。如果我将匿名内部类设置为静态,那么我可以访问我想访问的ut,而不必将其设置为静态。 怎么做。请帮帮忙。
问题内容: 我正在用Apache My Faces编写JSF 1.2应用程序。我不能使用任何自定义的组件库- 例如tomahawk或a4j等。有没有一种方法可以使用Ajax调用JSF的操作方法?完成JSF动作后,我想通过Javascript处理JSF动作的响应,并在客户端填充DIV标记?可能吗?谢谢。 问题答案: JSF 1.2不提供任何内置的ajax功能。您基本上有2个选择: Homegrow一
问题内容: 我有以下代码片段: 在这里,如何在不创建线程类实例的情况下为线程调用方法? 问题答案: 您已经在创建Thread类的实例-您对此不做任何事情。您甚至 可以不使用局部变量 来 调用: …但是我个人通常会将其分配给局部变量,然后执行您想要执行的其他任何操作(例如,设置名称等),然后启动它:
问题内容: 最近,我遇到了一个神秘的问题,在Android项目,我描述了这里。我以某种方式解决了问题,但仍然不知道其背后的确切原因。 假设我想在内部类中调用函数foo()。问题是,直接调用它有什么区别 或使用外部类实例对其进行调用 此外,如果有人能检查我与此相关的最后一个问题,并向我提供有关错误发生原因的线索,我将不胜感激。非常感谢。 PS:我在某处读到,非静态内部类将始终持有外部类的实例。因此,
我有这段代码,但IntelliJ告诉我用lambda替换anonymous,但我不知道如何替换。有谁能帮我一下吗?下面是我的代码: