我想对用户的操作做一些“记录”。我有不同的面板,所有面板都有Ajax功能,例如“ onclick”,“ onevent”和“ onchange”。我计划的是定义一个应用程序范围的字符串ArrayList来记录所有内容。
我将以下内容写入WicketApplication.java

public class WicketApplication extends WebApplication {

private List<String> log = new ArrayList<String>();

@Override
public Class<? extends WebPage> getHomePage() {
    //code
}

@Override
public void init() {
    //code
}

public List<String> getLog() {
    return log;
}

public void setLog(List<String> log) {
    this.log = log;
}}


然后在我的一个面板中:

public class Foo extends Panel{
private static final long serialVersionUID = 1L;
private WicketApplication wapp = (WicketApplication) Application.get();

public Foo(String id){
    super(id);
}

public void bar(){
    List<String> protocol = wapp.getLog();
    protocol.add(foo.getBarName() + " has been added to " + selectedKontakt.getObject().getName());
    wapp.setLog(protocol);
}
}


在下一个面板中,我尝试创建对WicketApplication的新引用。但这似乎并不相同。
现在我有以下问题:


WicketApplication不是唯一的,因此可用于这种操纵吗?
我需要参加一个会议吗?
我什至可以解析WebApplication的应用程序吗?因为我在控制台中有此错误



  wapp

还有其他方法可以创建应用程序范围的变量吗?

最佳答案

正常使用方法是(静态)方法。它是典型的,不要害怕。

MyApllication m = MyApllication.get();


因此,通常在每个检票口对象中都很容易。
通常“静态覆盖”以返回正确的类型(并可以提供其他控制)。

public static MyApllication getMyApplication() {
        return (MyApllication) get();
    }


要么

 public static MyApllication get() {
        return (MyApllication ) WebApplication.get();
    }


当此静态方法返回正确的类型时,您的问题已解决。

从Wicket团队分析如何在AuthenticatedWebApplication之上构建WebApplication(或在WebApplication之上构建Application),这似乎是规范的

顺便说一句,您将具有想法访问/取决于用户/会话执行操作,也存在类似的想法:WebSessionMySession中覆盖

07-24 19:05