java - Wicket:定义应用程序范围变量

标签 java session wicket

我想对用户正在做的事情做一些“记录”。我有不同的面板,所有这些面板都有 Ajax 功能,例如“onclick”、“oneevent”和“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 不是独一无二的,因此可用于此类操作吗?
  • 我必须为此参加 session 吗?
  • 我什至可以将应用程序解析为 WebApplication 吗?因为我在控制台中出现此错误

wapp <----- field that is causing the problem

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

最佳答案

我认为你做错了(在多个层面上)。

首先:如果你想记录日志,请使用日志框架。例如。 LogBack ,最好通过 SLF4J 访问

其次:如果您不想使用日志框架,请创建日志服务(专用对象,而不是 Wicket 应用程序),使用依赖注入(inject)将日志服务注入(inject)到您需要的所有组件中。 Wicket 支持 SpringGuice

第三:按照已接受答案的建议静态访问 WebApplication 听起来是一个非常糟糕的主意(但公平地说,它显然是 Wicket 建议的)。

关于java - Wicket:定义应用程序范围变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32732624/

相关文章:

java - .flatMap() 线程卡住

java - shell脚本没有完全从java执行

session - 为什么大多数网站在没有 cookie 的情况下无法运行?

java - Apache Wicket、OpenJPA 和 Spring/ROO

java - 表单 : exception when injecting values 中的 Wicket 隐藏字段

html - Wicket:带有用于多选的复选框的下拉框

java - java 中的数学随机数

java - libGDX:在横向卷轴器上实现 AI

python - 通过移动客户端在 Google App Engine 中使用 session

php - 网址不友好 - i18n