java - Wicket:在哪里添加组件?构造函数?还是 onBeforeRender?

标签 java wicket

我是 Wicket 新手。这可能只是我对 Wicket 生命周期的无知所以请赐教!我的理解是 Wicket WebPage 对象被实例化一次,然后被序列化。这让我有些困惑,见下文。

目前我有一个模板类,我打算对其进行子类化。我按照 Wicket 文档中的示例演示了如何覆盖子类中的模板行为:

protected void onBeforeRender() {
        add(new Label("title", getTitle()));

        super.onBeforeRender();
}

protected String getTitle() {
        return "template";
}

子类:

protected String getTitle() {
        return "Home";
}

这很好用。我不清楚的是这方面的“最佳实践”。似乎 onBeforeRender() 在页面的每个请求上被调用,不是吗?如果一切都在 onBeforeRender() 中,这似乎会在页面上完成更多的处理。我可以很容易地遵循其他 Wicket 示例的示例,并在构造函数中添加一些我不想覆盖的组件,但随后我按组件逻辑将其分为两个位置,我对此犹豫不决。

如果我添加一个我打算在所有子类中的组件,我应该将它添加到构造函数还是onBeforeRender()

最佳答案

对于不是Page的组件,您可以重写新的onInitialize回调来添加组件,它只会在构建后调用一次,当组件被添加时到页面(这样 component.getPage() 就不会返回 null)。

另一种选择是使用 addOrReplace() 而不是 add

至于在构造函数中调用重写的方法,请尝试在 Model 或其他一些延迟回调中执行此操作。在您的示例中,解决方案要简单得多:

public abstract class BasePage extends WebPage {
    public BasePage() {
        add(new Label("title", new PropertyModel<String>(this, "title")));
    }
    public abstract String getTitle();
}

使用 PropertyModel 检索标签的内容比将值插入标签要好得多。

关于java - Wicket:在哪里添加组件?构造函数?还是 onBeforeRender?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4914151/

相关文章:

Java XML 到数组

java - 无法转换为 java.io.Serializable

java - 带有 DropDownChoice 的 Wicket 表单,带有枚举和CompoundPropertyModel

java - 将 Google Web Toolkit (GWT) 用作成熟的 Java Web 框架是否有意义?

java - JSF 2 中使用 Ajax 调用根据请求参数更新部件时出错

java - 单例或被单例包裹的非单例

java - 如何从json对象获取十进制格式值

java - Wicket:如何实现未分组的单选按钮

java - 从 wicket 面板类调用 javascript 或修改 css

java - 如何使用 wicket 和 javascript 打印 pdf 文件